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

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

.pdf
Скачиваний:
6
Добавлен:
19.09.2023
Размер:
3.23 Mб
Скачать

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

 

121

5) Абстрактная Фабрика (Abstract Factory; Kit, Toolkit, Инструментарий, «Набор инструментов»)

Абстрактная Фабрика предоставляет инструменты для немедленного создания типовых объектов (сами объекты создаются после предоставления ссылки на интерфейс доступа к ним). Примеры использования: Системы хранения данных (СХД, Data Storage System), файлообменники, инструменты меню в приложениях.

область «решателя» по подбору инструментов для создания объектов (например,

выбора сервера хранения данных и самих серверов)

СХД

«решатель»

 

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

 

создаваемых по

 

запросу (ссылки на

 

фрагменты файла)

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

 

 

инструментарием

 

(например, отображения

 

ссылки на размещаемый

 

видеофайл в Сети)

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

 

122

область «рас-

6) Фасад

 

 

 

пределения

область

 

полномочий»

 

«полномочий»

 

по отображе-

 

определяет дос-

 

нию объектов и

 

тупные функции

 

их скрытию

 

 

 

(при реализации функций через

интерфейсы показывают

наследование

интерфейса

область взаимодействия с

(имплементи-

«видимыми» и «невидимыми»

рование функ-

объектами по отношению к

ций по «ро-

пользователю (обычно через

дительскому

интерфейсы)

шаблону»)

 

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

 

123

7) Мост (дескриптор/контекст)

Различают два подхода к построению Моста:

-Bridge-Down (сначала выполняется построение абстракций управляющих объектов, затем – управляемых реализаций);

-Bridge-Up (сначала – управляемые реализации, затем – управляющие объекты).

Мост также называют Handle/Body (идиома «дескриптор-контекст»)

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

область встраи-

 

ваемых техно-

область инст-

логических

рументов

решений

управления

 

наследование

наследование

интерфейса

(класса)

 

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

 

124

8) Компоновщик (Целое-Часть)

Шаблон Компоновщик (Целое-Часть, Whole-Part) предназ-

область общего интер-

начен для представления сложного объекта в виде набора

фейса для управления

составных и элементарных

составными и типо-

компонентов с помощью типо-

выми элементарными

вого (элементарного) структур-

блоками

ного шаблона через единый

 

интерфейс

 

область составного блока, включа-

 

реализация шаблона

 

класса в виде пара-

ющего типовые элементарные

 

 

метризованного

и/или составные компоненты

 

 

класса для обеспе-

 

 

 

 

чения рекурсии

 

область типо-

параметризованный

 

вого элемен-

 

класса (стереотипный

 

тарного блока

 

объект)

 

 

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

125

9) Декоратор (Обертка)

область

 

 

использования

 

 

 

 

 

Шаблон Декоратор (Wrapper,

декорированного и

 

 

недекорированного

 

 

«обертка» кода с добавочным

 

 

объекта

 

 

поведением) пред-назначен для

 

 

 

 

 

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

 

 

 

базовому объекту (как правило, на

область струк-

 

 

основе Компоновщик).

 

 

турированного

 

 

 

 

 

Код выполнения не меняется:

объекта

 

 

(обычно в виде

 

 

Декоратор является «оберткой» как

 

 

«Целое-Часть»)

 

 

дополнительным внешним

 

 

 

 

 

«слоем» исполняемого кода.

 

 

 

Примеры применения: using

 

 

 

namespace (С#), include (С++), import

 

 

 

(Java, php).

 

 

 

 

объект декорируется

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

 

 

рекурсивно (возможно много

 

 

структурного объекта

 

 

уровней вложения)

 

 

 

 

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

 

126

10) Прокси

Прокси (Proxy, Заместитель; Surrogate, Суррогат)

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

Различают 2 вида Прокси:

-виртуальный: для подгрузки изображений, видео и другого контента во время пагинации;

-авторизации: для организации доступа к логин-паролям и другой закрытой информации.

область управляемого объекта

[virtual proxy: перечень элементов, подгружаемых вместо временных «пусты- шек» и сами эле-

менты, authentication proxy: пере-

чень хранимых логиновпаролей и дос-

туп к ним]

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

[virtual proxy: загружаемая страница в браузере, authentication proxy:

страница доступа с логинпаролем]

область

управления

[virtual proxy:

фрейм загружаемой интернетстраницы,

authentication proxy: блок обра-

ботки логин-пароля]

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

 

127

11) Адаптер (Обертка)

Шаблон Адаптер (Wrapper,

«обертка» интерфейса для совместимости и/или встраивания) предназначен для обеспечения совместимости между объектами через общий интерфейс.

Код выполнения изменяется: Адаптер является оберткой в виде

дополнительного внутреннего

«слоя» исполняемого кода.

Применение:

плагины, дополнения, утилиты для кроссплатформенности.

об-

 

ласть

область

для

реализации

подклю-

адаптера

чения

 

адаптера

 

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

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

 

128

12) Приспособленец (Легковес)

Шаблон Flyweight (Ассоциативный массив, соотношение «one-one»; «Легковес», «Приспособленец») позволяет реализовать соотношение «один-к-одному»: при добавлении/изменении хранимой ячейки массива устанавливается существование дубликата.

Различают 2 состояния объектов

Flyweight:

-внутреннее (intrinsic): является как бы заархивированным;

-вычисляемое (extrinsic): является как бы разархивированным в момент использования.

область

внешне определяемого

состояния

объекта

(extrinsic state)

Flyweight:

Dictionary

в C#,

map в С++,

HashMap

в Java/PHP.

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

хранимых

объектов

(intrinsic state)

область

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

область доступа к объектамИтераторам:
инициализация и
извлечение
данных
Примеры классов:
Collection List ArrayList
область вызова Итератора пользователем для своих задач
for(Iterator i = NameRepository.getIterator(); i.hasNext(); i.next() ) { i.getBrand(‘sony’)…}

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

 

129

13) Итератор (Iterator, Перечислитель; Cursor, Курсор, “Указатель на перечисление”)

Шаблон Итератор позволяет производить перечисление объектов (foreach), отделяя реализацию такого перечисления в отдельный класс.

for(int i = 0; i < 10; i++) {…}

итераторы объявляются так, чтобы их вызывать без параметров

область реализации Итераторов: получе-

ние следующего значения и проверка завершения работы Итератора

например, пользователь может

вызвать итераторы:

Iterator_581_582_Rating() Iterator_all_Salary()

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

 

130

14) Стратегия (Strategy; Policy, “Политика выбора”)

внутри объекта-переключателя

 

Шаблон Стратегия позволяет создать объект-

 

должно быть приватное поле,

 

переключатель между различными алгоритмами

 

через которое происходит доступ

 

через общий интерфейс доступа.

 

к разным объектам-стратегиям.

 

 

 

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

 

 

переключателя через

 

 

общий интерфейс

 

 

область объектов-Стратегий для разных вариантов

область вызова

использования в зависимости от контекста

Стратегии через объект-переключа- тель