Я нахожусь в процессе решения проблемы, когда я думаю, что она лучше всего подходит для декоратора и шаблона состояния. Настройка высокого уровня - это что-то вроде сэндвичницы и диспенсера, где у меня есть определенное количество ингредиентов и несколько разных типов садовых сэндвичей, которые я могу приготовить. С каждым ингредиентом связана стоимость. Клиентом будет кто-то, кто будет использовать машину для выбора ингредиентов для приготовления конкретного сэндвича, и машина выдаст его.
На данный момент я создал ингредиенты и различные сэндвичи, используя шаблон декоратора:
public abstract class Sandwich {
String description = "Unknown Sandwich";
public String getDescription(){
return description;
}
public double cost(){
return 0.0;
}
}
Каждый ингредиент моделируется так:
public abstract class Ingredient extends Sandwich {
public abstract String getDescription();
}
И еще, конкретный ингредиент будет:
public class Cheese extends Ingredient {
private Sandwich sandwich;
public Cheese(Sandwich sandwich){
this.sandwich = sandwich;
}
public String getDescription() {
return sandwich.getDescription() + ", cheese";
}
public double cost() {
return 0.25 + sandwich.cost();
}
}
Конкретный тип сэндвича можно смоделировать так:
public class BLT extends Sandwich {
public BLT(){
description = "Bacon, Lettuce and Tomato";
}
}
Таким образом, клиент может создать специальный бутерброд, подобный этому:
Sandwich order_a_blt = new Tomato(new Lettuce(new Bacon(new Bread(new BLT()))));
В качестве следующего шага я создам объект Dispenser, который будет действовать как автомат, который предварительно загружен определенным количеством ингредиентов (которые измеряются в общих единицах), и пользователь может нажать кнопку, чтобы выбрать один из предустановленных выборов:
Например
- BLT: 1 единица томата, 1 единица
салат, 1 единица бекона, 1 единица хлеба
- SUB: 1 единица фрикадельки, 1 единица сыра,
1 единица итальянского соуса, 1 единица хлеба
- и т.д ..
Мой дозатор поставляется с предустановленным количеством единиц на ингредиент
- помидор: 10
- салат: 10
- бекон: 10
- и т.д ..
И список кнопок для выбора пользователем определенного сэндвича:
- 1-BLT
- 2-SUB
- 3-BBQ
- .. и т.д. * * тысяча пятьдесят-один
Идея состоит в том, чтобы отслеживать внутреннюю емкость ингредиентов и быть в состоянии сказать пользователю, что, скажем, у нас недостаточно бекона, чтобы сделать еще один BLT
Теперь моя первоначальная мысль - создать объект Dispenser на основе шаблона проектирования состояний, но я столкнулся с проблемой, пытаясь объединить объекты класса Ingredient с каким-то хранилищем в классе Dispenser. Сначала я думал, что карта с именем / значением объединяет тип ингредиента / количество ингредиента. Но я не уверен, как объединить эти шаблоны вместе, чтобы я мог автоматически уменьшать после каждого использования.
Возможно, у вас есть общее представление о том, как действовать дальше и реализовывать такую концепцию? Прежде всего, я на правильном пути с декоратором и шаблонами состояния? Будет ли более эффективный подход? Надеюсь, я четко объяснил проблему.
Спасибо за любое направление, я ценю любые мысли