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

Ex. 02 - Muitos Descontos e o Chain of Responsibility

package br.com.brunobs.designpatterns.chain.desconto;

public class DescontoPorVendaCasada implements Desconto {
    private Desconto proximo;

    public void setProximo(Desconto proximo) {
        this.proximo = proximo;
    }

    public double descontar(Orcamento orcamento) {
        if (existe("CANETA", orcamento) && existe("LAPIS", orcamento)) {
            System.out.println(this.getClass().getSimpleName());

            return orcamento.getValor() * 0.05;
        } else {
            return proximo.descontar(orcamento);
        }
    }

    private boolean existe(String nomeDoItem, Orcamento orcamento) {
        for (Item item : orcamento.getItens()) {
            if (item.getDescricao().equals(nomeDoItem))
                return true;
        }
        return false;
    }

}


package br.com.brunobs.designpatterns.chain.desconto;

public class CalculadorDesconto {
    public double calcula(Orcamento orcamento) {
        Desconto d1 = new DescontoPorCincoItens();
        Desconto d2 = new DescontoPorMaisDeQuinhentosReais();
        Desconto d3 = new DescontoPorVendaCasada();
        Desconto semDesconto = new SemDesconto();
        d1.setProximo(d2);
        d2.setProximo(d3);
        d3.setProximo(semDesconto);

        return d1.descontar(orcamento);
    }
}
1 resposta
solução!

Qual é a sua dúvida?