Скачиваний:
14
Добавлен:
05.09.2023
Размер:
3.94 Mб
Скачать

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

 

131

15) Состояние (State; Object for States)

Само состояние имеет доступ к кон-

 

 

тексту (к условиям работы кода в данный

 

Шаблон Состояние позволяет выполнять переключение

момент времени) и определяет возможности

 

между различными вариантами использования данных и

перехода в другие состояния.

 

функций, предусматривая все возможные варианты таких

if(cont.getState() == Start) {cont.setState(Start);}

 

переключений через общий интерфейс доступа к таким

if(cont.getState() == Stop) {/*уже установлено*/}

 

вариантам работы кода.

if(cont.getState() == Pause) {/*ошибка!!*/}

 

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

 

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

область переключения между состояниями в зависимости от разрешен-

ления «конечным

автоматом»

ных переходов (обычно показываются на UML-диаграмме состояний)

 

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

 

132

16) Команда (Command; Transaction, Транзакция)

Шаблон Команда позволяет добавить слой взаимодействия между набором выполняемых команд (invoke) и набором исполняемого кода (execute), в зависимости от текущих условий применения каждого из действий.

Примеры: выполнение команд

вприложении: по сочетанию клавиш, по выбору действий с «контрОлом» (control, графический элемент управления),

при наборе управляющих строк

вконсольном приложении.

область инициализации (invoke) действий при аллокации (allocate,

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

область

выполнения

(execute)

 

самих

 

команд

 

в зависи-

 

мости от

область управления

выбора

командами из поль-

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

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

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

 

133

16) Команда (Command; Transaction, Транзакция)

Создание и подготовка команд к выполнению

(invoking)

Вызов команд «Купить» (BuyStock) и сразу после этого – «Продать»

(SellStock) (executing)

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

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, «ловушка») для обработки событий

 

 

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

встраивания

область кода

 

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

«ловушки»

«ловушки»

 

 

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

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

 

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