ПКС / ПКС. Материалы лекций
.pdf4. Шаблоны проектирования критических сервисов |
|
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)
область
пользователя
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, “Политика выбора”) |
внутри объекта-переключателя |
|
Шаблон Стратегия позволяет создать объект- |
|
|
должно быть приватное поле, |
|
|
переключатель между различными алгоритмами |
|
|
через которое происходит доступ |
|
|
через общий интерфейс доступа. |
|
|
к разным объектам-стратегиям. |
|
|
|
|
|
область объект- |
|
|
переключателя через |
|
|
общий интерфейс |
|
|
область объектов-Стратегий для разных вариантов
область вызова
использования в зависимости от контекста
Стратегии через объект-переключа- тель