¿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());