Patrón singleton
Garantiza que exista una sola instancia de un objeto en toda la aplicación, con un punto de acceso global. Útil para configuración, cachés o conexiones.
const Configuracion = (function () {
let instancia;
function crear() {
return { tema: "claro", idioma: "es" };
}
return {
obtener() {
if (!instancia) instancia = crear();
return instancia;
},
};
})();
const a = Configuracion.obtener();
const b = Configuracion.obtener();
console.log(a === b); // true: es la misma instancia
Patrón observer
Define una relación uno a muchos: un sujeto mantiene una lista de observadores y les notifica cuando ocurre un cambio. Es la base de los sistemas de eventos.
class Sujeto {
constructor() {
this.observadores = [];
}
suscribir(fn) {
this.observadores.push(fn);
}
notificar(dato) {
for (const obs of this.observadores) obs(dato);
}
}
const noticias = new Sujeto();
noticias.suscribir((titular) => console.log("Lector 1:", titular));
noticias.suscribir((titular) => console.log("Lector 2:", titular));
noticias.notificar("¡Nueva versión de JavaScript!");
Ejemplos
Observer: lista de tareas reactiva
class Emisor {
constructor() { this.subs = []; }
on(fn) { this.subs.push(fn); }
emitir(dato) { this.subs.forEach((fn) => fn(dato)); }
}
const e = new Emisor();
e.on((x) => console.log("Recibido:", x));
e.emitir("hola");
e.emitir("mundo");