Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПКС / Design_patterns_Лекции все_114-146

.pdf
Скачиваний:
5
Добавлен:
05.09.2023
Размер:
1.08 Mб
Скачать
область управления «блогом»

4. Шаблоны проектирования критических сервисов

 

134

17) Обозреватель (Observer; Publish-Subscribe, “Публикатор-Подписчики”)

Шаблон Обозреватель позволяет cмоделировать соотношение «один-к-многим»

(“one-many”, one2many): управляющий объект (Subject, “one”) хранит список взаимосвязей с управляемыми объектами (Observer, “many”) и оповещает их об изменениях; управляемые объекты (“many”) предоставляют информацию об изменениях

«центральный» объект (“one”), используя ссылку.

В Обозревателе

область «читателей

блога»

моделируется

 

механизм оповещения

 

о новых событиях

 

(т.е. коммуникация

 

в основном

 

односторонняя –

 

от «блогера» к

 

«подписчикам блога»).

 

область проектирования и разработки «блога»

4. Шаблоны проектирования критических сервисов

 

135

17) Обозреватель (Observer)

push model

(модель с активным источником данных и пассивными приемниками)

Обобщенный шаблон MVC (Model-View-Controller)

на примере имплементации паттерна Observer

pull model

(модель с пассивным источником данных и активными приемниками)

«Модель-Представление-Взаимодействие» (MVC) представляет собой набор характеристик (Model), который можно создать в разных вариантах (View) с помощью набора операций (Controller).

4. Шаблоны проектирования критических сервисов

 

136

18) Медиатор (Mediator, Посредник)

Шаблон Медиатор предоставляет интерфейс для коммуникации («общения» путем отправки и приема сообщений) одинаково представимых объектов.

Медиатор позволяет моделировать соотношение «многие-ко-многим» (“many-many”, “many2many”). Примеры: чат, мессенджер, диспетчер задач, окно взаимодействия GUI (диалоговое окно, окно настроек),.. В частности, в качестве одинаково представимых объектов часто используются «контрОлы» (Control, графические элементы управления:

кнопки, чекбоксы, формы..)

область реализации одинаково

 

 

объект-диспетчер

 

 

 

 

представимых объектов (User),

 

 

 

 

которые взаимодействуют через

 

 

 

интерфейс для коммуникации

 

 

 

 

(ChatRoom)

 

 

 

 

любой «участник» через объект-диспетчер «общается» с другим

область управ-

 

 

 

 

ления «чатом»

1

*

*

1

 

4. Шаблоны проектирования критических сервисов

 

137

18) Медиатор (Mediator, Посредник)

создание объектов

передача разрешения на отправку сообщений Зарегистрированным пользователям и Гостям

4. Шаблоны проектирования критических сервисов

 

138

19) Хранитель (Memento, “Сувенир”; Token, Токен, Кадр стандартного формата, Маркер)

Шаблон Хранитель позволяет реализовать функции сохранения и восстановления (Save/Restore) копий дампа (dump) приложения, либо фрагмента приложения, либо базы данных, а также функции «шаг назад/шаг вперед» (Undo/Redo).

область хранилища сохраняемых

область пользователя приложением

и восстанавливаемых объектов,

с функциями «отменить/вернуть»

и сами

(Undo/Redo)

эти «до-

и доступа к

кументы»

ранее откры-

 

тым «доку-

число полностью

ментам»

 

сохраняемых копий

 

«документов»

 

число сохраняемых изменений

область доступа к Undo/Redo

копий «документов»

 

4. Шаблоны проектирования критических сервисов

 

139

19) Хранитель (Memento, “Сувенир”; Token, Токен, Кадр стандартного формата, Маркер)

Шаблон Хранитель часто используют для циклической перезаписи состояний (в системах видеонаблюдения,...).

блок «запоминания» дампа состояний или изменения состояний: вызывается объект Originator, обрабатывающий «кадр» Memento, который сохраняется в хра-

нилище CareTaker

блок извлечения дампа состояний или изменения состояний

дополнитель-

ное расчетное

смещение ин-

дексов, чтобы все 3

состояния не переза-

писывать каждый раз

например, для 3х изменений состояния для функции Undo/Redo может быть создан массив из 6 состояний: используются 0,1,2 перезаписываются все 3),затем 1,2,3 (добавляется одно), затем 2,3,4(еще одно),затем 3,4,5 (еще одно),затем 0,1,2 (все 3 состояния на перезапись).

4. Шаблоны проектирования критических сервисов

 

140

20) Шаблонный метод (Template method; Hook, “Ловушка”)

 

 

Шаблон «Ловушка» представляет механизм

 

область объектов

 

неявного встраивания кода, который при

 

 

определенных условиях может быть выполнен.

 

пользователя,

 

 

 

обрабатывающих

 

Примеры использования:

 

код «ловушки»

 

- Вирусы (virus) и средства защиты (firewall,

 

 

 

antivirus,..);

 

 

 

- «Лазейки» (backdoor): часто используются для

 

 

 

отладки и тестирования;

 

 

 

- Плагины (plugin): встраиваемые библиотеки

 

 

 

(“dll”);

 

 

 

- Дополнения (extenstion): встраиваемые

 

 

 

исполняемые файлы (“exe”);

 

super.

 

- Системы обновления приложений;

 

 

 

 

 

- Обработка событий (event handler).

 

 

 

private FormMain::ButtonOpenClick(

 

 

 

Control sender, Events ev)

область

 

 

«Хук» (hook, «ловушка») для обработки событий

 

 

является основным шаблоном проектирования

встраивания

область кода

 

для задач системного программирования.

«ловушки»

«ловушки»

 

 

(в неявном виде)

(в явном виде)

 

4. Шаблоны проектирования критических сервисов

 

141

21) Цепочка обязанностей (Chain Of Responsibility)

Шаблон «Цепочка обязанностей» позволяет смоделировать единообразную (через общий интерфейс) структуру объектов, связанных разной степенью ответственности выполнения действий: чем больше уровень вложения («перекладывания» ответственности), тем более глобальные действия применяются.

Примеры:

Обработка действий внутри предприятия, учитывая схему подчинения.

Обработка действий при выполнении типовой задачи, обусловленной пользовательским запросом (обработка нажатия клавиши «F1» пользователем: сначала ближайшим контрОлом, затем соответствующим окном настроек, затем еще более главным окном).

область

обращения к «логу»

область

реализации

рекурсив-

ного вызова объектов «лога»

область обработки «лога»: более высокий уровень (_level) – для более «ответственных» решений

4. Шаблоны проектирования критических сервисов

 

142

21) Цепочка обязанностей (Chain Of Responsibility)

Шаблон «Цепочка обязанностей» реализуются с помощью «неявного» интер-

фейса (AbstractLogger), в

котором представлена логика «перекладывания» отвественности на внутренний объект такого же типа

(#nextLogger), пока его зна-

чение не null.

4. Шаблоны проектирования критических сервисов

 

143

22) Посетитель (Visitor, “Визитер”)

Шаблон Визитер (Посетитель) предназначен для обработки структур: их отображения, расчета (одинаковых действий над конкретными типовыми объектами). Примеры: дерево каталогов, подсказки (hint).

область структуры данных (обычно это Комповщик)

область контекстных объектов-«визитеров»,

привязанных к определенной структуре данных

область обращения пользователя к структуре, обычно древовидной (реализованной с помощью\

Компоновщика).

Соседние файлы в папке ПКС