O que é um padrão de projeto?
Um padrão de projeto é uma solução comprovada e reutilizável para um problema comum no projeto de software. Não é código que você copia literalmente, mas uma ideia que você adapta ao seu caso.
Padrão módulo
Permite encapsular estado privado e expor apenas uma interface pública, aproveitando os closures.
const contador = (function () {
let cuenta = 0; // privado: ninguém de fora pode tocá-lo
return {
incrementar() { cuenta++; },
valor() { return cuenta; },
};
})();
contador.incrementar();
console.log(contador.valor()); // 1
// console.log(contador.cuenta); // undefined: é privado
Padrão factory
Uma factory é uma função que cria objetos, ocultando os detalhes de como
eles são construídos. É uma alternativa mais flexível do que usar new
diretamente.
function crearUsuario(nombre, rol) {
return {
nombre,
rol,
saludar() {
return `Olá, sou ${nombre} (${rol})`;
},
};
}
const admin = crearUsuario("Ana", "admin");
console.log(admin.saludar());
A factory permite decidir que tipo de objeto criar em tempo de execução, sem acoplar o código a uma classe específica.
Exemplos
Módulo com 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 conforme o tipo
function crearForma(tipo, tamano) {
if (tipo === "cuadrado") return { area: () => tamano * tamano };
if (tipo === "circulo") return { area: () => Math.PI * tamano * tamano };
}
console.log("Área quadrado:", crearForma("cuadrado", 4).area());