Introducción: Algoritmos intercambiables
Strategy define una familia de algoritmos y permite cambiar uno por otro en runtime. El contexto delega el comportamiento a una estrategia concreta.
Esto facilita extender la lógica sin modificar el contexto, manteniendo el código abierto a nuevas variantes.

Prompt: Chess pieces representing different strategies, minimal style.
1. Naturaleza: Rutas de migración
Las especies pueden elegir rutas distintas según clima o depredadores.
La estrategia de viaje se ajusta al contexto sin cambiar el objetivo final: llegar al destino.

Prompt: Multiple migration paths on a map, clean infographic style.
2. Mundo Real: Métodos de pago
Tarjeta, PayPal o transferencia: diferentes estrategias para el mismo objetivo.
El checkout selecciona la estrategia según preferencias o condiciones, pero el flujo general permanece intacto.

Prompt: Payment method icons, clean UI style.
3. Implementación en C#: Código Paso a Paso
public interface IEnvio { decimal Calcular(decimal peso); }
public class EnvioEstandar : IEnvio { public decimal Calcular(decimal p) => p * 1.0m; }
public class EnvioExpress : IEnvio { public decimal Calcular(decimal p) => p * 1.5m; }
public class Carrito
{
private IEnvio _envio;
public void SetEnvio(IEnvio envio) => _envio = envio;
public decimal TotalEnvio(decimal peso) => _envio.Calcular(peso);
}
4. Strategy vs State
Strategy se elige explícitamente. State cambia de forma interna según transiciones.
Si el cliente decide qué algoritmo usar, es Strategy; si el objeto cambia por sí mismo, es State.
5. Diagrama UML

Prompt: UML diagram of Strategy pattern, clean vector layout.

Prompt: Strategy switch diagram, minimal infographic style.
⚠️ Cuándo NO Usar Strategy
- Si solo hay un algoritmo fijo.
- Si el costo de crear muchas clases supera el beneficio.
💪 Ejercicio
Implementa estrategias de descuento: porcentaje, fijo, y por volumen.
Conclusión
Strategy da flexibilidad y separa algoritmos del contexto. Es ideal para reglas de negocio variables o políticas configurables.