Chain of responsibility (цепочка обязанностей)




Цепочка обязанностей — поведенческий шаблон проектирования, предназначенный для организации в системе уровней ответственности.

Назначение

для организации в системе уровней ответственности

Применение

Шаблон рекомендован для использования в условиях:

в разрабатываемой системе имеется группа объектов, которые могут обрабатывать сообщения определенного типа;

все соообщения должны быть обработаны хотя бы одним объектом системы;

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

Command (Команда)

Command (Команда) — шаблон проектирования, используемый при объектно-ориентированном программировании, представляющий действие. Объект команды заключает в себе само действие и его параметры.

Назначение

для обработки команды в виде объекта

Описание

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

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

 


Iterator (Итератор)

Iterator (Итератор) – Шаблон проектирования. Представляет собой объект, позволяющий последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящий в состав агрегации.

Observer (Наблюдатель)

Observer (Наблюдатель) — поведенческий шаблон проектирования. Также известен как "подчинённые" (Dependents), "издатель-подписчик" (Publisher-Subscriber).

Назначение

Определяет зависимость типа "один ко многим" между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

 

 

При реализации шаблона "наблюдатель" обычно используются следующие классы.

Observable — интерфейс, определяющий методы для добавления, удаления и оповещения наблюдателей.

Observer — интерфейс, с помощью которого наблюдаемый объект оповещает наблюдателей.

ConcreteObservable — конкретный класс, который реализует интерфейс Observable.

ConcreteObserver — конкретный класс, который реализует интерфейс Observer.

Область применения

Шаблон "наблюдатель" применяется в тех случаях, когда система обладает следующими свойствами:

существует, как минимум, один объект, рассылающий сообщения

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

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

State (Состояние)

State (Состояние) — шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния.

Паттерн состоит из 3 блоков:

Widget — класс, объекты которого должны менять свое поведение в зависимости от состояния.

IState — интерфейс, который должно реализовать каждое из конкретных состояний. Через этот интерфейс объект Widget взаимодействует с состоянием, делегируя ему вызовы методов. Интерфейс должен содержать средства для обратной связи с объектом, поведение которого нужно изменить. Для этого используется событие (паттерн Publisher — Subscriber). Это необходимо для того, чтобы в процессе выполнения программы заменять объект состояния при появлении событий. Возможны случаи, когда сам Widget периодически опрашивает объект состояние на наличие перехода.

StateA … StateZ — классы конкретных состояний. Должны содержать информацию о том, при каких условиях и в какие состояния может переходить объект из текущего состояния. Например, из StateA объект может переходить в состояние StateB и StateC, а из StateB — обратно в StateA и так далее. Объект одного из них должен содержать Widget при создании.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-12-21 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: