Образец архетипа
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Шаблон архетипа — это шаблон проектирования программного обеспечения , который отделяет логику от реализации. Разделение достигается путем создания двух абстрактных классов : декоратора (для логики) и делегата (для реализации). Фабрика переданным обрабатывает сопоставление классов декораторов и делегатов и возвращает пару, связанную с параметром или параметрами. Интерфейс — это контракт между декоратором, делегатом и вызывающим классом, создающий инверсию ответственности . [1] В этом примере используются две ветки; однако при необходимости вы можете иметь N ветвей. Этот шаблон означает, что одной ветке интерфейса не нужно беспокоиться о том, как работает другая ветвь, пока она реализует интерфейс.
Разделы
[ редактировать ]Декоратор
Потомки класса декоратора обрабатывают логику, например, выполняют вычисления. Потомки декоратора могут затем позвонить потомкам делегированного, когда они захотят передать ответственность, например, за хранение или связь.
Делегат
Потомки класса потока делегатов обрабатывают реализацию вызова подсистемы, хранилища или связи. Разные дети могут использовать совершенно разные подсистемы хранения или коммуникации, чем друг друга.
UML
[ редактировать ]Пример Java
[ редактировать ]public interface Request {
public void sendRequest();
}
public class RequestFactory {
public static Request getRequest(String a, String b){
DecoratorRequest dcr = null;
DelegateRequest dlr = null;
if (a.equals("A"))
dcr = new ADecoratorRequest();
if (a.equals("B"))
dcr = new BDecoratorRequest();
if (b.equals("Y"))
dlr = new YDelegateRequest();
if (b.equals("Z"))
dlr = new ZDelegateRequest();
dcr.setDelegate(dlr);
return dcr;
}
}
public class App {
public static void main(String[] args) {
Request cr = null;
cr = RequestFactory.getRequest("A", "Y");
cr.sendRequest();
cr = RequestFactory.getRequest("A", "Z");
cr.sendRequest();
cr = RequestFactory.getRequest("B", "Y");
cr.sendRequest();
cr = RequestFactory.getRequest("B", "Z");
cr.sendRequest();
}
}
public abstract class DecoratorRequest implements Request {
protected DelegateRequest delegate;
public DecoratorRequest() {
}
public void setDelegate(DelegateRequest delegate) {
this.delegate = delegate;
}
}
public abstract class DelegateRequest implements Request {
public DelegateRequest () {
}
}
public class ADecoratorRequest extends DecoratorRequest {
@Override
public void sendRequest() {
System.out.print("A-");
delegate.sendRequest();
}
}
public class BDecoratorRequest extends DecoratorRequest {
@Override
public void sendRequest() {
System.out.print("B-");
delegate.sendRequest();
}
}
public class YDelegateRequest extends DelegateRequest {
@Override
public void sendRequest() {
System.out.println("-Y");
}
}
public class ZDelegateRequest extends DelegateRequest {
@Override
public void sendRequest() {
System.out.println("-Z");
}
}
Участники
[ редактировать ]Шаблон делегирования — вызывает конкретную реализацию.
Шаблон декоратора — выполняет обобщенную логику.
Шаблон фабричного метода — создает комбинацию архетипов.
Ссылки
[ редактировать ]- ^ Басфорд, П: GTS, 2009.
См. также
[ редактировать ]- Шаблон проектирования (информатика) — стандартное решение распространенных проблем при проектировании программного обеспечения.
- Поведенческий паттерн , паттерны, определяющие общие связи между объектами.
- Посредничество данных
- Шаблоны архитектуры (эталовая архитектура EA)