# Propósito
El patrón Strategy define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Permite que el algoritmo varíe independientemente de los clientes que lo usan.
# Problema
-
Acoplamiento Rígido: Mezclar la lógica de negocio con múltiples implementaciones de algoritmos.
-
Estatismo: Imposibilidad de cambiar el comportamiento en tiempo de ejecución de forma limpia.
# Solución
Encapsular cada algoritmo en su propia clase (estrategia concreta) y delegar su ejecución desde la clase principal (contexto).
# Estructura
# Participantes
- Context: Mantiene la referencia a la estrategia elegida.
- Strategy (Interface): Interfaz común para todos los algoritmos.
- ConcreteStrategy: Implementación específica del algoritmo.
# Cuándo Usarlo
Cuando tienes múltiples formas de realizar una tarea y quieres poder intercambiarlas dinámicamente sin llenar el código de if/else.
# Ventajas
-
verified
Flexibilidad: Cambio de algoritmo en caliente.
-
verified
Aislamiento: La lógica compleja del algoritmo no ensucia la clase Contexto.
# Desventajas
-
warning
Costo de Comunicación: Overhead al pasar datos entre Contexto y Estrategia.
-
warning
Visibilidad: Los clientes deben conocer qué estrategias existen para elegirlas.
# Ejemplo: Sistema de Navegación
Cálculo de rutas: Rápida, Corta o Escénica. Cada una es una estrategia distinta que el usuario selecciona.
# Código Java
interface RouteStrategy { void build(String a, String b); }
class FastestRoute implements RouteStrategy {
public void build(String a, String b) {
System.out.println("Ruta rápida");
}
}
class NavigationSystem {
private RouteStrategy s;
public void setStrategy(RouteStrategy s) { this.s = s; }
public void navigate(String a, String b) { s.build(a, b); }
}
# Mapeo Participantes
- RouteStrategy: Strategy Interface.
- FastestRoute/ScenicRoute: ConcreteStrategies.
- NavigationSystem: Context.
# Conclusiones
Convierte a los algoritmos en bloques de construcción modulares y fáciles de testear de forma aislada.
# Patrones relacionados
Flyweight
Las estrategias concretas pueden ser compartidas si no guardan estado.
State
Ambos usan delegación, pero Strategy es una elección puntual del cliente.