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

ПКС / ПКС. Материалы лекций

.pdf
Скачиваний:
7
Добавлен:
19.09.2023
Размер:
3.23 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, «ловушка») для обработки событий

 

 

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

встраивания

область кода

 

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

«ловушки»

«ловушки»

 

 

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

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