1
resposta

Refatorando código repetido

Olá a todos!

Para testar o Strategy, criei uma classe main e executei vários testes, cada um utilizando um parâmetro diferente.

Porém, percebi que o código é exatamente o mesmo para cada parâmetro.

Minha intenção agora é, didaticamente, refatorar a classe para criar um único método e não precisar repetir código.

Porém, na prática, vi que não é tão fácil quanto parece.

Alguém pode me ajudar?

public class TesteCalculoImposto {

    public static void main(String[] args) {

        BigDecimal valor = new BigDecimal("1000");
        Orcamento orcamento = new Orcamento(valor);

        // Enum 1
        CalculadoraDeImpostosEnum1 calculadora = new CalculadoraDeImpostosEnum1();
        BigDecimal impostoCalculado = calculadora.calcularImposto(orcamento, TipoImpostoEnum1.ICMS);
        System.out.println(impostoCalculado);

        // Enum 2
        CalculadoraDeImpostosEnum2 calculadora2 = new CalculadoraDeImpostosEnum2();
        BigDecimal impostoCalculado2 = calculadora2.calcularImposto(orcamento, TipoImpostoEnum2.ICMS);
        System.out.println(impostoCalculado2);

        // Enum 3
        CalculadoraDeImpostosEnum3 calculadora3 = new CalculadoraDeImpostosEnum3();
        BigDecimal impostoCalculado3 = calculadora3.calcularImposto(orcamento, TipoImpostoEnum3.ICMS);
        System.out.println(impostoCalculado3);

        // Interface
        CalculadoraDeImpostosInterface calculadora4 = new CalculadoraDeImpostosInterface();
        BigDecimal impostoCalculado4 = calculadora4.calcularImposto(orcamento, new ICMS());
        System.out.println(impostoCalculado4);

        // Interface 2
        CalculadoraDeImpostosInterface2 calculadora5 = new CalculadoraDeImpostosInterface2();
        BigDecimal impostoCalculado5 = calculadora5.calcularImposto(orcamento, new ICMS2());
        System.out.println(impostoCalculado5);
    }
}
1 resposta

Oi Fabiano, tudo bem?

O instrutor explica a refatoração para aplicar o padrão Strategy nesse vídeo:

https://cursos.alura.com.br/course/introducao-design-patterns-java/task/85647

Basicamente criar uma interface Imposto com um método calcular que recebe o Orcamento. E o imposto especifico que implementa a interface possui a logica (estratégia) para calcular o imposto de um orçamento.

Tudo bem?

abs, Nico