DevPath · Aprende a programar ESPTEN

Patrones de diseño

Singleton y observer

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");
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Patrón módulo y factoryPatrón strategy →