Gostaria de saber se há algum problema na minha implementação. Juntei dois design patterns, o chain of responsibility e o template method.
public abstract class DescontoTemplate {
private DescontoTemplate proximo;
public double desconta(Orcamento orcamento) {
if (condicaoParaDesconto(orcamento)) {
return calculaDesconto(orcamento);
} else {
return proximo.desconta(orcamento);
}
}
public abstract boolean condicaoParaDesconto(Orcamento orcamento);
public abstract double calculaDesconto(Orcamento orcamento);
public void setProximo(DescontoTemplate desconto) {
this.proximo = desconto;
}
}
public class DescontoParaMaisDe500Reais extends DescontoTemplate {
@Override
public boolean condicaoParaDesconto(Orcamento orcamento) {
return orcamento.getValor() > 500;
}
@Override
public double calculaDesconto(Orcamento orcamento) {
return orcamento.getValor() * 0.07;
}
}
public class DescontoParaMaisDe5Itens extends DescontoTemplate {
@Override
public boolean condicaoParaDesconto(Orcamento orcamento) {
return orcamento.getItens().size() > 5;
}
@Override
public double calculaDesconto(Orcamento orcamento) {
return orcamento.getValor() * 0.1;
}
}