WikiDer > Образец архетипа
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
В Образец архетипа отделяет логику от реализации; разделение достигается наличием двух абстрактных классов: декоратора (для логики) и делегата (для реализации). Factory обрабатывает сопоставление классов декоратора и делегата и возвращает пару, связанную с переданным параметром или параметрами. Интерфейс - это контракт между декоратором, делегатом и вызывающим классом, создающий Инверсия ответственности.[1] В этом примере используются две ветви, однако при необходимости вы можете иметь N ветвей. Шаблон означает, что одна ветвь из интерфейса не должна беспокоиться о том, как работает другая ветвь, если она реализует интерфейс.
Разделы
Декоратор
Потомки класса декоратора обрабатывают логику, например, выполняют вычисления. Потомки декоратора могут затем вызывать потомков делегированного, когда или если они хотят передать ответственность, например, хранение или связь.
Делегат
Потомки класса потока делегата обрабатывают реализацию для вызова подсистемы, хранилища или связи. Разные дети могут использовать совершенно разные подсистемы хранения или связи, чем друг друга.
UML
Пример Java
общественный интерфейс Запрос { общественный пустота послать запрос();}общественный учебный класс RequestFactory { общественный статический Запрос getRequest(Нить а, Нить б){ DecoratorRequest DCR = ноль; DelegateRequest dlr = ноль; если (а.равно("А")) DCR = новый ADecoratorRequest(); если (а.равно("B")) DCR = новый BDecoratorRequest(); если (б.равно("Y")) dlr = новый YDelegateRequest(); если (б.равно("Z")) dlr = новый ZDelegateRequest(); DCR.setDelegate(dlr); возвращаться DCR; }}общественный учебный класс Приложение { общественный статический пустота главный(Нить[] аргументы) { Запрос cr = ноль; cr = RequestFactory.getRequest("А", "Y"); cr.послать запрос(); cr = RequestFactory.getRequest("А", "Z"); cr.послать запрос(); cr = RequestFactory.getRequest("B", "Y"); cr.послать запрос(); cr = RequestFactory.getRequest("B", "Z"); cr.послать запрос(); }}общественный Абстрактные учебный класс DecoratorRequest орудия Запрос { защищенный DelegateRequest делегировать; общественный DecoratorRequest() { } общественный пустота setDelegate(DelegateRequest делегировать) { это.делегировать = делегировать; }}общественный Абстрактные учебный класс DelegateRequest орудия Запрос { общественный DelegateRequest () { }}общественный учебный класс ADecoratorRequest расширяет DecoratorRequest { @Override общественный пустота послать запрос() { Система.из.Распечатать("А-"); делегировать.послать запрос(); }}общественный учебный класс BDecoratorRequest расширяет DecoratorRequest { @Override общественный пустота послать запрос() { Система.из.Распечатать("B-"); делегировать.послать запрос(); }}общественный учебный класс YDelegateRequest расширяет DelegateRequest { @Override общественный пустота послать запрос() { Система.из.println("-Y"); }}общественный учебный класс ZDelegateRequest расширяет DelegateRequest { @Override общественный пустота послать запрос() { Система.из.println("-Z"); }}
Участников
Шаблон делегирования - вызывает конкретную реализацию
Шаблон декоратора - выполняет обобщенную логику
Шаблон заводского метода - создает комбинацию архетипов
Рекомендации
- ^ Басфорд, П: GTS, 2009.
Смотрите также
- Шаблон проектирования (информатика), стандартное решение распространенных проблем в разработке программного обеспечения
- Образец поведения, шаблоны, которые определяют общую связь между объектами
- Посредничество данных
- Шаблоны архитектуры (эталонная архитектура EA)