DevPath · Aprende a programar ESPTEN

Patrones de diseño

Patrón módulo y factory

¿Qué es un patrón de diseño?

Un patrón de diseño es una solución probada y reutilizable a un problema común en el diseño de software. No es código que copias literalmente, sino una idea que adaptas a tu caso.

Patrón módulo

Permite encapsular estado privado y exponer solo una interfaz pública, aprovechando los closures.

const contador = (function () {
  let cuenta = 0; // privado: nadie de fuera puede tocarlo

  return {
    incrementar() { cuenta++; },
    valor() { return cuenta; },
  };
})();

contador.incrementar();
console.log(contador.valor()); // 1
// console.log(contador.cuenta); // undefined: es privado

Patrón factory

Una factory es una función que crea objetos, ocultando los detalles de cómo se construyen. Es una alternativa más flexible que usar new directamente.

function crearUsuario(nombre, rol) {
  return {
    nombre,
    rol,
    saludar() {
      return `Hola, soy ${nombre} (${rol})`;
    },
  };
}

const admin = crearUsuario("Ana", "admin");
console.log(admin.saludar());

La factory te permite decidir qué tipo de objeto crear en tiempo de ejecución, sin acoplar el código a una clase concreta.

Ejemplos

Módulo con estado privado

const banco = (function () {
  let saldo = 0;
  return {
    depositar(x) { saldo += x; },
    consultar() { return saldo; },
  };
})();
banco.depositar(100);
banco.depositar(50);
console.log("Saldo:", banco.consultar());

Factory según el tipo

function crearForma(tipo, tamano) {
  if (tipo === "cuadrado") return { area: () => tamano * tamano };
  if (tipo === "circulo") return { area: () => Math.PI * tamano * tamano };
}
console.log("Área cuadrado:", crearForma("cuadrado", 4).area());
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 →
Singleton y observer →