Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Fiz o Strategy Enum da seguinte forma. Tudo bem?

Olá a todos!

Juntei alguns conceitos aprendidos em outras aulas na Alura e fiz as minhas classes da seguinte forma:

public enum TipoImpostoEnum {

    ICMS(new BigDecimal("0.1")),
    ISS(new BigDecimal("0.06")),
    IPQP(new BigDecimal("0.4"));

    private final BigDecimal aliquota;

    TipoImpostoEnum(BigDecimal aliquota) {
        this.aliquota = aliquota;
    }

    public BigDecimal getAliquota() {
        return aliquota;
    }
}
public class CalculadoraDeImpostosEnum {

    public BigDecimal calcularImposto(Orcamento orcamento, TipoImpostoEnum tipoImposto) {
        return orcamento.getValor().multiply(tipoImposto.getAliquota());
    }
}
public class TesteCalculoImposto {

    public static void main(String[] args) {

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

        CalculadoraDeImpostosEnum calculadora = new CalculadoraDeImpostosEnum();
        BigDecimal impostoCalculado = calculadora.calcularImposto(orcamento, TipoImpostoEnum.ICMS);
        System.out.println(impostoCalculado);

Fiz o teste, compilou e rodou certinho.

Ainda assim, tá seguindo o padrão de projeto e respeitando as boas práticas?

4 respostas

Oi Fabiano.

Parece que está tudo ok. Só trocaria o nome da classe CalculadoraDeImpostosEnum por CalculadoraDeImpostos. Só usamos ...Enum quando realmente estamos usando um Enumeration.

Valeu pela dica, Allan!

solução!

Oi Fabiano,

Está certinho sim. Cada constante do enum conhece sua aliquota e o código do cálculo não está mais com os ifs, além do código continuar simples para adicionar/alterar/remover novos impostos.

Bons estudos!

Obrigado, Rodrigo!