Olá, ao ver os vídeos percebi que ocorre uma certa "ordenação" dos métodos calcular, onde cada vez é chamado um novo Desconto.
Poderia ser criada um List para guardar todos os descontos e ir verificando um a um com o "hasNext()"?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá, ao ver os vídeos percebi que ocorre uma certa "ordenação" dos métodos calcular, onde cada vez é chamado um novo Desconto.
Poderia ser criada um List para guardar todos os descontos e ir verificando um a um com o "hasNext()"?
Olá Erik!
Sim, você pode usar um List no padrão Chain of Responsibility para guardar todos os descontos e ir verificando um a um com o "hasNext()". Na verdade, essa é uma abordagem comum para implementar esse padrão.
Por exemplo, você pode criar uma lista de objetos que implementam a interface Desconto e, em seguida, percorrer a lista verificando se o desconto pode ser aplicado ou não. Se o desconto puder ser aplicado, você pode aplicá-lo e sair do loop. Caso contrário, continue verificando os próximos descontos.
Aqui está um exemplo de como você pode implementar isso:
public class CalculadoraDeDescontos {
private List<Desconto> descontos;
public CalculadoraDeDescontos(List<Desconto> descontos) {
this.descontos = descontos;
}
public double calcular(Orcamento orcamento) {
for (Desconto desconto : descontos) {
if (desconto.podeAplicar(orcamento)) {
return desconto.calcular(orcamento);
}
}
return 0;
}
}Espero ter ajudado e bons estudos!