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.

questionAnswers(1)

yourAnswerToTheQuestion