Метод 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();
}
}
Если бы кто-нибудь мог помочь или даже указать мне хорошую статью или учебник, я был бы очень признателен.