Na aula sobre Chain of Responsibility é usado uma interface para criar uma abstração das classes de desconto, porém, apesar de a interface funcionar bem, ainda existe um trecho do código que está sendo repetido em todas as classes. Gostaria de saber se o uso de uma Classe Abstrata seria uma boa prática, já que poderíamos escrever esse código que está repetindo apenas uma vez, isso poderia gerar problemas futuros?
Classe abstrata ficaria assim:
public abstract class Desconto {
protected Desconto proximo;
public void setProximoDesconto(Desconto proximo) {
this.proximo = proximo;
}
public abstract String responde(Formato format, Conta conta);
}
Assim todas as classes que herdarem essa, não precisaram reescrever o código de "setProximoDesconto" e nem o atributo "proximo", mas mesmo assim seria obrigatório implementar o método "calcula" pois ele seria um método abstrato, dessa forma:
public class DescontoMaisQuinhentosReais extends Desconto {
public double calcula(Orcamento orcamento) {
if (orcamento.getValor() > 500.0) {
return orcamento.getValor() * 0.07;
}
return super.proximo.calcula(orcamento);
}
}