Patrón Strategy en C#: Guía Completa

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.

Estrategias
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.

Rutas
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.

Pagos
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

UML Strategy
Prompt: UML diagram of Strategy pattern, clean vector layout.
Cambio de estrategia
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.