2011-01-09 5 views
8

Чтобы быть откровенным, это вопрос домашней работы, поэтому я скажу вам свое мнение. Можете ли вы сообщить мне свои ошибки, а не дать мне решение?Какую модель дизайна я должен использовать в этом вопросе?

Это вопрос:

Предположим, ресторан, который предлагает только следующие два вида пищи: (а) полный обед и (б) экономическую еду. Полная еда состоит из следующих продуктов питания и подается в следующем порядке: 1. Закуска 2. Пить 3. Основное блюдо 4. Десерт Между тем хозяйственная еда состоит из следующих продуктов питания и подается в в следующем порядке: 1. Пейте 2. Основное блюдо

Определить наиболее подходящий шаблон дизайна, который может быть использован, чтобы позволить клиенту только заказ, используя один из двух типов блюд, предусмотренных и что компоненты еды должны быть поданы в данный заказ.

Я запутался между Фабрикой и Итератором и использовал их вместе. Используя заводской шаблон, мы можем создать полное и экономичное питание и предоставить пользователю базовый класс объектов, который будет решать. Но как мы можем обеспечить упорядочение элементов, я думал об использовании итератора, который будет проходить через композицию из двух созданных фабрик.

Как вы думаете?

+6

Я думаю, что напиток должен быть подан первым в обе еду. –

+0

Фабрика и итератор звучат хорошо! Я не понимаю, что вы имеете в виду, «итерации через композицию двух созданных фабрик». Не могли бы вы объяснить, как использовать итератор для разработки полноценной еды (не считая заводов и хозяйственной еды на секунду)? – Ishtar

+0

Принимая во внимание, что каждый элемент является классом и его обслуживают с помощью метода в этом классе, как я могу служить «apptizer then drink, ..etc», следует ли использовать итератор для итерации по этим объектам? –

ответ

1

Первое, что приходит на ум, это шаблон Decorator Таким образом, вы можете создать Meal базу и 2 concreate блюда FullMeal и EconomicMeal , то вы можете иметь компоненты еды в качестве декораторов и смешивать и сочетать их, как вам нравится ,

+0

Я тоже думал о шаблоне декоратора, и в реальном приложении я бы, вероятно, использовал его, но он действительно построен для добавления специальных функций, а не для обеспечения определенного рабочего процесса/сочетания функций, которые эта проблема призывает. – Paul

-4

Я думаю, что домашнее задание плохо сформулировано. Как цитируется здесь, я не вижу проблемы.

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

Что проблема? Просто укажите клиента с выбором двух опций ("choose meal type (1-full, 2-economy):), и все готово. Почему для этого нужен шаблон дизайна?

Дизайн шаблонов - это инструмент для программиста/дизайнера, а не для пользователя. (IMHO) должен быть «предлагать шаблоны проектирования, которые позволили бы программисту ...», например «... комбинировать/модифицировать тип еды на основе данных фиксированных типов блюд» или что-то в этом роде.

Как указывалось выше, вопрос не определяет проблему программирования/проектирования, или молчаливо предполагает слишком много.

+1

Вам не хватает точки. Это домашнее задание. Другими словами, был разработан фальшивый сценарий, помогающий изучать, когда применять шаблоны проектирования. – Finglas

+1

@Finglas: Я смею сказать, что вам не хватает ** моей ** точки. Я прекрасно понимаю, что это домашнее задание, и что такое домашнее задание. Я говорю, что ** эта ** домашняя работа (как указано) не определяет проблему программирования/дизайна, которая должна быть решена с использованием шаблона проектирования. Или что это ** слишком неявно ** – davka

+0

Предполагая, что он адресован, что случилось с моим решением?!! –

1

это двухступенчатый процесс, который я думаю, где вы путаться. ядром вещь они ищет шаблон вы будете использовать, чтобы выбрать логику, которую пользователь будет заказывать. Что на самом деле делает эта логика, или какой порядок приема пищи подается, не относится к этой части.

Итак, у вас будет базовый интерфейс или абстрактный класс, который имеет метод или методы для размещения заказа (он не говорит, что еда должна быть запрошена в порядке ее обслуживания, либо, ll note). У этого класса Meal, вероятно, будет несколько методов, один из которых включает ServeFood() или аналогичный. У вас будет два конкретных класса для этого (например, FullMeal и EconomyMeal), и поскольку их порядок неважен, вы можете реализовать его с помощью Factory.

Конкретные классы будут отвечать за подачу пищи в правильном порядке, когда на них вызывается ServeFood().

+0

В качестве продолжения, если вы также должны говорить о том, как обслуживать еду, то внутри конкретных классов вы, вероятно, будете делать итератор. – Paul

+0

это именно то, что я пытался сказать, но вы сказали это магическим способом .. спасибо, что вы сделали эту идею очень очищенной :) –

+0

Если вам нужен интересный способ действительно ухаживать за дизайном, iyad, вы должны проверить Первые образцы дизайна (http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?s=books&ie=UTF8&qid=1294587433&sr=1-1). В то время как «Банда четырех» - это семантическая работа, подход «Голова первый» * действительно доступен и интересен для начала работы с некоторыми из наиболее распространенных. – Paul

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