Qual a vantagem de utilizar o chain of responsibility ao invés de um simples estrutura de dados com as validações? Por exemplo:
...
List<Desconto> descontos = new ArrayList<>();
descontos.add(new Desconto1(orcamento));
descontos.add(new Desconto2(orcamento));
for(int i = 0; i < descontos.size; i++) {
Desconto atual = descontos.get(i);
if(atual.calcular() > 0) return atual.calcular();
}
return 0;
Desta forma eu não tenho uma cascata de if's e sempre que eu tiver um novo desconto, só preciso criar a classe referente e adiciona-lo na lista. Com o chain of responsibility eu sou obrigado a fazer o mesmo, porém a lista estará "escondida" dentro da própria estrutura dos objetos de desconto. Em termos de modificações, continuo a modificar exatamente as mesmas classes sempre que precisar de um novo desconto.