Criei 2 formas de implementar o exercicio, a primeira igual a resposta do exercicio, deu tudo certo, mas outra eu implementei uma classe que tem uma lista de itens de venda casada. Na classe Testa desconto adicionei dois itens na lista ItensVendaCasada .adicionaItem(Item) e adicionei os mesmos itens no orcamento, mas retornou false;
package br.com.Alura.Design_Pattern;
import java.util.ArrayList;
import java.util.List;
public class ItensVendaCasada {
private static List<Item> itensVendaCasada = new ArrayList<Item>();
public void adicionaItem(Item item) {
itensVendaCasada.add(item);
}
public static List<Item> getItensVendaCasada() {
return itensVendaCasada;
}
}
ta retornando false no metodo DescontoPorVendaCasada2.existeItens(Orcamento orcamento);
package br.com.Alura.Design_Pattern;
import java.util.List;
public class DescontoPorVendaCasada2 implements Desconto2 {
private Desconto2 proximo;
List<Item> listaItensVendaCasada = ItensVendaCasada.getItensVendaCasada();
@Override
public double calcula(Orcamento orcamento) {
if (existeItens(orcamento)) {
return orcamento.getValor() * 0.05;
} else {
return proximo.calcula(orcamento);
}
}
private boolean existeItens(Orcamento orcamento) {
// Aqui uma lista de Itens venda casada comparando com
// itens de outra lista que esta na classe orcamento
if(listaItensVendaCasada.containsAll(orcamento.getItens())) {
return true;
}
return false;
}
@Override
public void setProximo(Desconto2 proximo) {
this.proximo = proximo;
}
}