Strategy em Java para desacoplar o cálculo de frete
Autor: Emanuel Antônio Lima Rocha 1 Base fundamental Introdução O Strategy é um padrão comportamental que reúne maneiras alternativas de executar uma operação sob um contrato comum, permitindo escolher a implementação usada pelo contexto. No catálogo de Gamma e colaboradores, ele pertence à categoria dos padrões comportamentais [1]. A separação entre contexto, interface e estratégias concretas…
O Strategy é um padrão de design que permite escolher diferentes implementações para executar uma operação sob um contrato comum. Ele separa o contexto, interface e estratégias concretas, possibilitando a variação do algoritmo por composição. Neste artigo, apresenta-se um exemplo de aplicação do padrão Strategy para desacoplar o cálculo de frete em um checkout legado.
No contexto do estudo de caso, um checkout existente calcula frete econômico e expresso dentro de um único método, o que dificulta a manutenção ao alterar as tarifas. O padrão Strategy resolve esse problema, separando as regras de cálculo em estratégias distintas (FreteEconomico e FreteExpresso). Cada estratégia calcula o frete de acordo com suas próprias regras.
O código demonstra uma classe main, que serve como o contexto, e instancia uma CalculadoraFrete com uma das estratégias, dependendo da modalidade escolhida (economico ou expresso). As estratégias implementam a interface FreteStrategy e utilizam a classe Pedido, que contém a informação do peso do pedido. O método calcular() é responsável por realizar o cálculo de acordo com as regras de cada estratégia.
Para executar o código, basta rodar java Main.java economico ou java Main.java expresso, o que resultará em Frete: R$ 15.50 ou Frete: R$ 27.00, respectivamente. Implementações adicionais, como validações, integração com banco de dados e formatação da moeda, não foram incluídas neste exemplo, mas seriam necessárias para uma aplicação real.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.