Padrão strategy
O padrão strategy define uma família de algoritmos intercambiáveis e permite escolher qual usar em tempo de execução. Em JavaScript, como as funções são valores, ele é implementado de forma muito natural guardando funções em um objeto.
const estrategias = {
normal: (precio) => precio,
miembro: (precio) => precio * 0.9, // 10% de desconto
vip: (precio) => precio * 0.8, // 20% de desconto
};
function calcularPrecio(precio, tipoCliente) {
const estrategia = estrategias[tipoCliente] || estrategias.normal;
return estrategia(precio);
}
console.log(calcularPrecio(100, "vip")); // 80
console.log(calcularPrecio(100, "miembro")); // 90
Por que é útil?
- Elimina longas cadeias de
if/elseouswitch. - Adicionar um novo comportamento é tão fácil quanto adicionar uma função ao objeto.
- Cada estratégia fica isolada e é fácil de testar separadamente.
Exemplos
Strategy para ordenar de formas diferentes
const ordenar = {
asc: (a, b) => a - b,
desc: (a, b) => b - a,
};
const numeros = [3, 1, 2];
console.log([...numeros].sort(ordenar.asc));
console.log([...numeros].sort(ordenar.desc));