Boa tarde. Gostaria de saber se essa abordagem faz sentido.
Nas subclasses de Desconto ao invés de utilizar um construtor, que recebe o próximo desconto como argumento, eu pensei em não receber nada e na chamada do super, no construtor das subclasses, passar o próximo desconto adequado. Algo como..
public class DescontoNoOrcamentoComMaisDeCincoItens extends DescontoDoOrcamento{
public DescontoNoOrcamentoComMaisDeCincoItens() {
super(new DescontoNoOrcamentoParaValoresAcimaDeQuinhetos(new DescontoZero()));
}
// classe da calculadora
public class CalculadoraDeDescontoDeOrcamento {
public BigDecimal calcular(Orcamento orcamento) {
DescontoNoOrcamentoParaValoresAcimaDeQuinhetos desconto = new DescontoNoOrcamentoParaValoresAcimaDeQuinhetos();
return desconto.calcular(orcamento);
}
Acho que também é valido deixar os dois construtores, um para deixar o cliente informar os próximos descontos, e o segundo, para que o próprio desconto informe o próximo desconto.