Padrão singleton
Garante que exista uma única instância de um objeto em toda a aplicação, com um ponto de acesso global. Útil para configuração, caches ou conexões.
const Configuracion = (function () {
let instancia;
function crear() {
return { tema: "claro", idioma: "pt" };
}
return {
obtener() {
if (!instancia) instancia = crear();
return instancia;
},
};
})();
const a = Configuracion.obtener();
const b = Configuracion.obtener();
console.log(a === b); // true: é a mesma instância
Padrão observer
Define uma relação um para muitos: um sujeito mantém uma lista de observadores e os notifica quando ocorre uma mudança. É a base dos 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("Leitor 1:", titular));
noticias.suscribir((titular) => console.log("Leitor 2:", titular));
noticias.notificar("Nova versão do JavaScript!");
Exemplos
Observer: lista de tarefas reativa
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("Recebido:", x));
e.emitir("olá");
e.emitir("mundo");