JavaScriptPOOintermediario

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

Mais exercícios de POO

JSP021 · AvançadoClasse LinkedListJSP005 · BásicoContador de instânciasJSP008 · Básicoinstanceof e verificação de tipoJSP009 · BásicoClasse abstrata simulada
Ver todos os exercícios de JavaScript