Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Chain of responsibility vs Lista de validações

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.

1 resposta
solução!

Oi Mikeas,

As duas soluções seriam meio que "equivalentes", pois estariam evitando uma classe possuir todas as regras de desconto misturadas e acopladas.

Ao usar uma interface ou classe abstrata e extrair as regras em classes separadas o código fica mais organizado, coeso e desacoplado.

Bons estudos!