Um caso concreto

O cálculo de frete pode variar por transportadora ou região. Um grande switch espalhado pelo checkout dificulta incluir uma regra nova sem afetar as existentes.

Exemplo em C#

public interface ICalculadoraFrete
{
    decimal Calcular(Pedido pedido);
}
public sealed class FreteExpresso : ICalculadoraFrete
{
    public decimal Calcular(Pedido pedido) => pedido.Peso * 2.5m;
}
public sealed class Checkout(ICalculadoraFrete frete)
{
    public decimal Total(Pedido pedido) => pedido.Subtotal + frete.Calcular(pedido);
}

O mecanismo de composição decide qual estratégia injetar; a regra de cálculo continua isolada e pode ser testada sem o checkout.

Trade-offs

Strategy é valioso quando há variação real, mas criar uma classe para cada expressão trivial pode exagerar. Compare com State, que modela transições e comportamento condicionado pelo ciclo de vida, e veja o catálogo de padrões.