1
// Implementación de Singleton en ES6
class GestorEstadoGlobal {
static #instanciaUnica = null;
constructor() {
// Si ya fue instanciada, retornamos la misma referencia de memoria
if (GestorEstadoGlobal.#instanciaUnica) {
return GestorEstadoGlobal.#instanciaUnica;
}
// Estado inicial de la aplicación
this.sesionIniciada = false;
this.usuarioActivo = null;
this.idioma = "es";
this.idInstancia = Math.random().toString(36).substring(2, 9);
// Guardamos la referencia única
GestorEstadoGlobal.#instanciaUnica = this;
}
iniciarSesion(usuario) {
this.sesionIniciada = true;
this.usuarioActivo = usuario;
console.log(` Sesión iniciada globalmente para: ${usuario.nombre}`);
}
cerrarSesion() {
this.sesionIniciada = false;
this.usuarioActivo = null;
console.log(" Sesión cerrada globalmente.");
}
obtenerEstado() {
return {
idInstancia: this.idInstancia,
autenticado: this.sesionIniciada,
usuario: this.usuarioActivo ? this.usuarioActivo.nombre : "Anónimo",
idioma: this.idioma
};
}
}
// ==========================================
// PRUEBA EN EL SANDBOX
// ==========================================
console.log("=== CREANDO INSTANCIA 1 EN MÓDULO A ===");
const estadoEnModuloA = new GestorEstadoGlobal();
console.log("Estado inicial:", estadoEnModuloA.obtenerEstado());
// Iniciamos sesión en el Módulo A
estadoEnModuloA.iniciarSesion({ nombre: "Carlos Mendoza", rol: "Admin" });
console.log("\n=== CREANDO INSTANCIA 2 EN MÓDULO B ===");
// En otro archivo completamente distinto, alguien hace "new GestorEstadoGlobal()"
const estadoEnModuloB = new GestorEstadoGlobal();
console.log("Estado leído desde Módulo B:", estadoEnModuloB.obtenerEstado());
console.log("\n=== COMPROBACIÓN DE IDENTIDAD EN MEMORIA RAM ===");
const sonIdenticos = (estadoEnModuloA === estadoEnModuloB);
console.log("¿estadoEnModuloA === estadoEnModuloB?:", sonIdenticos); // true!
console.log(`ID Instancia A: ${estadoEnModuloA.idInstancia}`);
console.log(`ID Instancia B: ${estadoEnModuloB.idInstancia}`);
Haz clic para editar este código