Patrón strategy
El patrón strategy define una familia de algoritmos intercambiables y permite elegir cuál usar en tiempo de ejecución. En JavaScript, como las funciones son valores, se implementa de forma muy natural guardando funciones en un objeto.
const estrategias = {
normal: (precio) => precio,
miembro: (precio) => precio * 0.9, // 10% descuento
vip: (precio) => precio * 0.8, // 20% descuento
};
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 qué es útil?
- Elimina largas cadenas de
if/elseoswitch. - Añadir un nuevo comportamiento es tan fácil como añadir una función al objeto.
- Cada estrategia queda aislada y es fácil de probar por separado.
Ejemplos
Strategy para ordenar de distintas formas
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));