2009-11-23 6 views
6

Как я могу узнать, что мне нужен шаблон фасада в момент разработки моего приложения?Использование шаблона фасада

Как я могу нарисовать линию между шаблоном фасада и шаблоном шаблона?

Например: В статье [this] мы видим, что в int placeOrder(int CustomerID, List<BasketItem> Products) имеется ряд предопределенных шагов в алгоритме. Итак, почему автор не использует шаблон шаблона здесь?

+3

Что вы понимаете, нарисовав линию между фасадом и шаблоном? Фасад - это структурный шаблон, а шаблон - образец поведения. Я не вижу, как вы можете связать эти два? – RichardOD

ответ

9

Фасад имеет дело с интерфейсом, а не с реализацией. Его цель - скрыть внутреннюю сложность за одним интерфейсом, который выглядит просто снаружи. В примере из вашего вопроса фасад скрывает четыре класса (Order, OrderLine, Address, BasketItem) за единственным методом.

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

Итак, почему автор не использует шаблон шаблона здесь?

Было бы целесообразно сделать метод шаблона, если бы было несколько подобных версий операции. Возможно, несколько методов, таких как placePhoneOrder, placeInternetOrder, placeManuallyEnteredOrder могут быть реорганизованы в один шаблон placeOrder с некоторыми подклассами, реализующими только {phone, internet, manual} -специфические отличия.

+0

Отлично! Я нахожу именно то, что мне нужно. – anonymous

3

Предположим, у вас есть несколько служб, библиотек или что-то еще. Эти библиотеки нуждаются в взаимодействии, чтобы выполнять некоторые услуги более высокого уровня. Затем вы можете захотеть обернуть эти вызовы и код инициализации, которые обычно идут вместе, и предлагают кучу функций, чтобы скрыть эти детали и упростить использование этих служб для определенных сценариев. Тогда это хорошее применение для фасадного рисунка.

ОБНОВЛЕНИЕ: В упомянутой статье метод PlaceOrder имеет одну единственную реализацию, которая работает для всех заказов. Шаблон шаблона предназначен для того, чтобы предписывать последовательность шагов, которые должны выполняться, но позволяющие подклассам предлагать свою собственную реализацию этих фиксированных шагов. Например, если вам нужны заказы на обработку телевизоров по-разному от заказов на микроволны, вы можете использовать шаблонный шаблон для переопределения некоторого воображаемого метода DispatchParcel (чтобы отправить микроволновую печь как простой пакет, но телевизор с дополнительным сервисом, чтобы помочь поднять тяжелое устройство на верхний этаж). В нашем случае нет необходимости в повторной реализации шагов ProcessOrder, поэтому нет необходимости в шаблоне шаблона, поскольку одна единственная реализация соответствует всем типам заказов.

7

Шаблон фасада подходит, если у вас сложная система, которую вы хотите упростить для клиентов, или хотите создать внешний уровень связи над существующей системой, которая несовместима с вашей системой. Это структурный рисунок . См. Здесь: http://en.wikipedia.org/wiki/Facade_pattern

Образец шаблона, с другой стороны, представляет собой шаблон , который поможет вам справиться с внутренней реализацией компонента. См. Здесь: http://en.wikipedia.org/wiki/Template_method_pattern