Eu terminei de ver a primeira aula do curso, falando sobre o Stratagy, mas não entendi o porque de usar o Stratagy. Entendo os benefícios de usar esse desing pattern em um projeto real (de melhoras no código à comunicação), mas neste exemplo em especifico, os impostos não iriam estar constantemente mudando e, se não existisse nenhum tipo de consulta a algum serviço para atualiza-los, um enum poderia ser melhor. Usando uma variável dentro do enum que guardasse a taxa do imposto, o código continuaria coeso e a função que calcula o imposto teria de, apenas, usar o valor da taxa para calcular, e não fazer a chamada de uma outra função; Diminuindo o numero de classes e deixando as taxas em um mesmo lugar. Então, queria entender o porque esse método (enum) seria prejudicial pro código e se seria "errado" usar esse tipo de solução.
Segue implementação sugerida:
Imposto:
public enum Imposto {
ISS(new BigDecimal("0.06")),
ICMS(new BigDecimal("0.1"));
private final BigDecimal taxa;
public BigDecimal getTaxa() {
return taxa;
}
Imposto(BigDecimal taxa) {
this.taxa = taxa;
}
}
Calculadora de impostos:
public class CalculadoraDeImpostos {
public BigDecimal calcular(BigDecimal saldo, Imposto imposto) {
BigDecimal taxaLiquida = new BigDecimal(1).subtract(imposto.getTaxa());
return saldo.multiply(taxaLiquida);
}
}