2014-11-23 9 views
0

Для школьного задания у меня есть возможность реализовать шаблон стратегии, и я полностью понимаю шаблон с интерфейсом и контекстом, который в зависимости от того, что задано, получает правильную стратегию, но я просто могу " t, похоже, выяснить, как реализовать его с моей конкретной проблемой.Реализация шаблона стратегии для моей конкретной проблемы

Проблема:

Дайте дизайн решения (с UML-диаграмма классов), который решает следующие задачи: система управляет несколько поваров (с помощью повара класса для этого). Некоторые из этих поваров нуждаются в разных вещах, чем другие, чтобы подготовиться к кулинарной сессии, таким образом, повара различают среди других и могут обслуживать разные настройки. Система используется сетью ресторанов, которая работает с большим количеством поваров. Важно составить правильный набор поваров на основе ограниченного сочетания препаратов, поэтому довольно легко удалить поваров определенного типа или добавить новые. Ваше решение должно демонстрировать различные шаги после вызова метода prepare() для повара. Некоторые примеры: варить Jeroen просто нужно, чтобы «поставить фартук», это тоже то, что делают большинство других поваров. Но повар Кристиан должен «поставить фартук, взять коллекцию ножей и установить классическую музыку». И поварам Нини и Льву нужно «открыть пиво и установить какой-то хардрок». Остерегайтесь: некоторые действия требуют взаимодействия с другими классами (они не обязательно должны быть включены явно в ваше решение), поэтому недостаточно просто добавить атрибут String-атрибута!

Я думаю, что Preperation является Тхет интерфейс стратегии и различные виды preperations являются ConcreteStrategies (на примере найдено здесь: http://upload.wikimedia.org/wikipedia/commons/3/39/Strategy_Pattern_in_UML.png) и кок контекст в данном примере

Упование вы можете пролить свет на это для меня (я предпочел бы намек в сторону тэ правильном направлении, а не полное решение)

Edit: Заменены мой explenation проблемы и вставил оригинальный текст

+0

Что вы хотите сказать? Также звучит как «Цепочка ответственности» для меня. –

+0

Итак, у вас есть шаблон дизайна и вы ищете проблему для его применения. Именно так вы не должны использовать шаблоны проектирования. То, что вам нужно, - это проблема для решения и примените шаблон, который элегантно решает эту проблему. Шаблоны выходят из кода, а не наоборот.Из вашего описания проблемы я не вижу, как будет выглядеть шаблон стратегии. –

+0

Я не вижу использования шаблона стратегии в вашем посте. Спросите себя, какова проблема, на самом деле решающая задача Стратегии в этом задании? – FunctionR

ответ

0

Вы находитесь на правильном пути. Каждый Cook должен иметь список интерфейсов Preparation. Я бы порекомендовал иметь конструктор для повара, который берет их список, а не сеттер. Интерфейс подготовки должен иметь способ получить описание препарата, например. getDescription(). Затем можно было бы создать реализацию, такую ​​как PutApronOnPreparation, которая может иметь элемент String, называемый description, который также может быть установлен из конструктора. Это то, что это будет выглядеть так:

class PutApronOnPreparation implements Preparation { 
    private final String description; 

    public PutApronOnPreparation(String description) { 
     this.description = description; 
    } 

    @Override 
    public getDescription() { 
     return description; 
    } 
} 

Теперь, если у вас есть Cook экземпляр, который был инициализирован со списком этих Preparation реализаций, его метод prepare() может пройти по списку и вызовите getDescription() для каждого из их.

Наконец, искать через несколько Cook случаев вы можете иметь другой способ, такой как hasPreparation(...), который может принимать строковый аргумент и который перебирает список Подготовка и проверки, если значение getDescription() содержит эту строку. В качестве альтернативы, это может быть подготовка в качестве аргумента, и, если вы переопределили метод equals(), вы бы точно соответствовали объектам.

 Смежные вопросы

  • Нет связанных вопросов^_^