Метод Decorator, один тип Decorator в Java

Я нахожусь в процессе обучения использованию шаблона декоратора, и я столкнулся с проблемой, которую я считаю простой, но я не могу найти ответ на нее. Допустим, у меня есть класс Beverage, который является абстрактным. Тогда, скажем, у меня есть несколько конкретных компонентов, расширяющих Beverage: americano, espresso, latte и т. Д. А также абстрактный класс Condiment, расширяющий Beverage. Класс Condiments тогда имеет несколько подклассов: молоко, сахар, соя, кнут. Каждый из подклассов приправ имеет метод cost и getdescription (), унаследованные от Beverage и Condiments соответственно. Мой вопрос состоит в том, как мне остановить определенный экземпляр Beverage, имеющий более одной приправы одного и того же типа, связанной с ним при тестировании, то есть американо платят за сою только один раз, даже если соя была заявлена ​​дважды в тестовом классе. Я знаю, что могу сохранить приправу в списке и проверить, существует ли она при добавлении новой приправы. Я просто хотел посмотреть, существует ли лучший вариант.

Класс напитков

public abstract class Beverage {

    String description = "Unknown Beverage";

    public String getDescription() {
        return description;
    }

    public abstract double cost();

}

Приправа Декоратор

public abstract class CondimentDecorator extends Beverage {

    public abstract String getDescription();

}

Класс DarkRoast

public class DarkRoast extends Beverage {

    public DarkRoast() {
        description = "Dark Roast Coffee";
    }

    public double cost() {
        return .99;
    }

}

Соевый класс

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

}

Если бы кто-нибудь мог помочь или даже указать мне хорошую статью или учебник, я был бы очень признателен.

Ответы на вопрос(1)

Ваш ответ на вопрос