Método Decorator, um tipo Decorator em Java
Estou aprendendo a usar o padrão decorador e encontrei um problema que considero simples, mas não consigo encontrar a resposta. Digamos que eu tenha uma classe de bebidas abstrata. Então digamos que eu tenho alguns componentes concretos que estendem a Bebida: americano, café expresso, café com leite etc. E também uma classe abstrata do Condimento que estende a Bebida. A classe Condimentos possui várias subclasses: leite, açúcar, soja, chicote. Cada uma das subclasses de condimentos possui um método cost e getdescription () herdado de Beverage e Condiments, respectivamente. Minha pergunta é: como faço para impedir que uma determinada instância de bebida tenha mais de um condimento do mesmo tipo associado a ela durante o teste, ou seja, um americano sendo cobrado pela soja apenas uma vez, mesmo que a soja tenha sido declarada duas vezes na classe de teste. Eu sei que poderia salvar um condimento em uma lista e verificar se ele existe ao adicionar um novo condimento, só queria ver se havia uma opção melhor.
Classe de bebidas
public abstract class Beverage {
String description = "Unknown Beverage";
public String getDescription() {
return description;
}
public abstract double cost();
}
Condiment Decorator
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
Classe DarkRoast
public class DarkRoast extends Beverage {
public DarkRoast() {
description = "Dark Roast Coffee";
}
public double cost() {
return .99;
}
}
Classe de soja
public class Soy extends CondimentDecorator {
Beverage beverage;
public Soy(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ", Soy";
}
public double cost() {
return .15 + beverage.cost();
}
}
Se alguém puder ajudar ou mesmo me indicar um bom artigo ou tutorial, eu agradeceria muito.