WikiDer > Образец архетипа

Archetype pattern

В Образец архетипа отделяет логику от реализации; разделение достигается наличием двух абстрактных классов: декоратора (для логики) и делегата (для реализации). Factory обрабатывает сопоставление классов декоратора и делегата и возвращает пару, связанную с переданным параметром или параметрами. Интерфейс - это контракт между декоратором, делегатом и вызывающим классом, создающий Инверсия ответственности.[1] В этом примере используются две ветви, однако при необходимости вы можете иметь N ветвей. Шаблон означает, что одна ветвь из интерфейса не должна беспокоиться о том, как работает другая ветвь, если она реализует интерфейс.

Разделы

Декоратор
Потомки класса декоратора обрабатывают логику, например, выполняют вычисления. Потомки декоратора могут затем вызывать потомков делегированного, когда или если они хотят передать ответственность, например, хранение или связь.

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

UML

ClassModel.jpg

Отправить Request.jpg

Пример 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");    }}

Участников

Шаблон делегирования - вызывает конкретную реализацию

Шаблон декоратора - выполняет обобщенную логику

Шаблон заводского метода - создает комбинацию архетипов

Рекомендации

  1. ^ Басфорд, П: GTS, 2009.

Смотрите также