2. В разработке программного
обеспечения — повторимая архитектурная
конструкция, представляющая собой решение
проблемы проектирования в рамках некоторого
часто возникающего контекста.
Обычно шаблон не является законченным
образцом, который может быть прямо
преобразован в код; это лишь пример решения
задачи, который можно использовать в
различных ситуациях.
Объектно-ориентированные шаблоны
показывают отношения и взаимодействия ме
жду классами или объектами, без определения
того, какие конечные классы или объекты
приложения будут использоваться.
3. «Низкоуровневые» шаблоны, учитывающие
специфику конкретного языка программирования,
называются идиомами. Это хорошие решения
проектирования, характерные для конкретного
языка или программной платформы, и потому не
универсальные.
На наивысшем уровне
существуют архитектурные шаблоны, они
охватывают собой архитектуру всей программной
системы.
Алгоритмы по своей сути также являются
шаблонами, но не проектирования, а вычисления,
так как решают вычислительные задачи.
4. В сравнении с полностью самостоятельным
проектированием, шаблоны обладают рядом
преимуществ. Основная польза от использования
шаблонов состоит в снижении сложности разработки за
счёт готовых абстракций для решения целого класса
проблем. Шаблон даёт решению свое имя, что облегчает
коммуникацию между разработчиками, позволяя
ссылаться на известные шаблоны. Таким образом, за
счёт шаблонов производится унификация деталей
решений: модулей, элементов проекта, — снижается
количество ошибок.
Применение шаблонов концептуально сродни
использованию готовых библиотек кода. Правильно
сформулированный шаблон проектирования позволяет,
отыскав удачное решение, пользоваться им снова и
снова. Набор шаблонов помогает разработчику выбрать
возможный, наиболее подходящий вариант
проектирования.
5. Название Оригинальное название Описание
Описан вDesign
Patterns
Основные шаблоны (Fundamental)
Шаблон
делегирования
Delegation pattern
Объект внешне
выражает некоторое
поведение, но в
реальности передаёт
ответственность за
выполнение этого
поведения связанному
объекту.
Н/Д
Шаблон
функциональног
о дизайна
Functional design
Гарантирует, что
каждый модуль
компьютерной
программы имеет
только одну
обязанность и
исполняет её с
минимумом побочных
эффектов на другие
части программы.
Н/Д
6. Неизменяемый
интерфейс
Immutable
interface
Создание неизменяе
мого объекта.
Н/Д
Интерфейс Interface
Общий метод для
структурирования
компьютерных
программ для того,
чтобы их было проще
понять.
Н/Д
Интерфейс-маркер Marker interface
В качестве атрибута
(как пометки
объектной сущности)
применяется наличие
или отсутствие
реализации
интерфейса-маркера.
В современных языках
программирования
вместо этого могут
применяться атрибуты
или аннотации.
Н/Д
7. Контейнер
свойств
Property Container
Позволяет добавлять
дополнительные свойства
для класса в контейнер
(внутри класса), вместо
расширения класса новыми
свойствами.
Н/Д
Event Channel Event Channel
Расширяет шаблон
Publish/Subscribe, создавая
централизованный канал для
событий. Использует объект-
представитель для подписки и
объект-представитель для
публикации события в канале.
Представитель существует
отдельно от реального
издателя или подписчика.
Подписчик может получать
опубликованные события от
более чем одного объекта,
даже если он зарегистрирован
только на одном канале.
Н/Д
8. Порождающие шаблоны (Creational) — шаблоны
проектирования, которые абстрагируют процесс
инстанцирования. Они позволяют сделать систему
независимой от способа создания, композиции и
представления объектов. Шаблон, порождающий классы,
использует наследование, чтобы изменять инстанцируемый
класс, а шаблон, порождающий объекты, делегирует
инстанцирование другому объекту.
Абстрактная
фабрика Abstract factory
Класс, который
представляет
собой
интерфейс для
создания
компонентов
системы.
Да
Строитель Builder
Класс, который
представляет
собой
интерфейс для
создания
сложного
объекта.
Да
9. Фабричный метод Factory method
Определяет интерфейс для
создания объекта, но оставляет
подклассам решение о том,
какой класс инстанцировать.
Да
Отложенная
инициализация
Lazy
initialization
Объект, инициализируемый во
время первого обращения к нему.
Нет
Пул одиночек Multiton
Гарантирует, что класс имеет
поименованные экземпляры
объекта и обеспечивает
глобальную точку доступа к ним.
Нет
Объектный пул Object pool
Класс, который представляет
собой интерфейс для работы с
набором инициализированных и
готовых к использованию
объектов.
Нет
Прототип Prototype
Определяет интерфейс создания
объекта через клонирование
другого объекта вместо создания
через конструктор.
Да
10. Получение
ресурса есть
инициализация
Resource
acquisition is
initialization
(RAII)
Получение
некоторого ресурса
совмещается с
инициализацией, а
освобождение — с
уничтожением
объекта.
Нет
Одиночка Singleton
Класс, который
может иметь только
один экземпляр.
Да
Структурные шаблоны (Structural) определяют различные сложные
структуры, которые изменяют интерфейс уже существующих
объектов или его реализацию, позволяя облегчить разработку и
оптимизировать программу.
11. Производящие шаблоны (Creational
patterns), предназначенные для создания
объектов.
Поведенческие шаблоны (Behavioral
patterns), обеспечивающие координацию
функционального взаимодействия между
объектами.
Структурные шаблоны (Structural patterns),
используемые для управления
статическими, структурными связями между
объектами.
Системные шаблоны (System patterns),
предназначенные для управления
взаимодействием на системном уровне.
12. Отдельный класс (single class). Шаблон
применяется к отдельному,
независимому классу.
Компонент (component). Шаблон
используется для создания группы
классов.
Архитектурный (architectural). Шаблон
используется для координации работы
систем и подсистем.