Padrão Strategy
Em sistemas reais, como e-commerce, o cálculo de frete varia entre transportadoras (Correios, FedEx, transportadora local). Usar condicionais para cada tipo polui o código e dificulta adicionar novas opções. O padrão Strategy resolve isso isolando cada algoritmo em classes separadas, permitindo trocar a estratégia em tempo de execução sem modificar o código do pedido.
O PROBLEMA
Implemente calculadora de frete com Strategy. Classes: FreteCorreios, FreteFedEx, FreteRetirada. Pedido recebe estratégia.
EXEMPLO
const p = new Pedido(10, new FreteCorreios()); p.calcularFrete() → R$25.00 p.setEstrategia(new FreteFedEx()); p.calcularFrete() → R$45.00
SOBRE O CONCEITO
O padrão Strategy define uma família de algoritmos intercambiáveis. Aqui, cada classe de frete implementa a mesma interface — mesmo método calcularFrete(peso). O erro comum é colocar o cálculo dentro de Pedido com if/else para cada tipo de frete, o que viola o princípio aberto/fechado. Em vez disso, Pedido recebe a estratégia via construtor ou setter, delegando o cálculo. Assim, para adicionar um novo frete, basta criar uma nova classe sem alterar Pedido. Use class e constructor para definir as estratégias e this.estrategia para armazenar a referência.
RESOLUÇÃO