Olá.
Vocês veem diferença aonde ao invés de usar uma classe para ter tais comportamentos, eu ter apenas um enum, e dentro do enum colocar todas as regras em formato de atributo, e desta forma eu criar um método no enum para realizar o cálculo de todos os impostos recebendo um array de enums ?
Exemplo algo do tipo
public enum TiposDeImpostos {
ICMS(new BigDecimal("0.1")),
ISS(new BigDecimal("0.06"));
private BigDecimal porcentagemDeDesconto;
TiposDeImpostos(BigDecimal porcentagemDeDesconto) {
this.porcentagemDeDesconto = porcentagemDeDesconto;
}
public BigDecimal realizarCalculo(Orcamento orcamento, ArrayList<TiposDeImpostos> tiposDeImpostos) {
var valor = BigDecimal.ZERO;
tiposDeImpostos.forEach(imposto ->
valor.add(orcamento.getValor().multiply(imposto.porcentagemDeDesconto))
);
return valor;
}
}
Vejo que desta maneira continua tendo o mesmo efeito(pouco lugar para refatorar em mudanças)