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);
}
}