Порождающие шаблоны абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять наследуемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.
Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов. Шаблон реализуется созданием абстрактного класса Factory, который представляет собой интерфейс для создания компонентов системы (например, для оконного интерфейса он может создавать окна и кнопки). Затем пишутся классы, реализующие этот интерфейс.
Простыми словами: Фабрика фабрик. Фабрика, которая группирует индивидуальные, но связанные/зависимые фабрики без указания их конкретных классов.
Предоставляет способ создания составного объекта. Предназначен для решения проблемы антипаттерна «Телескопический конструктор».
Простыми словами: Позволяет создавать различные виды объекта, избегая засорения конструктора. Он полезен, когда может быть несколько видов объекта или когда необходимо множество шагов, связанных с его созданием.
Предоставляет подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Иными словами, данный шаблон делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне.
Простыми словами: Менеджер предоставляет способ делегирования логики создания экземпляра дочерним классам.
Задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа. Он позволяет уйти от реализации и позволяет следовать принципу «программирование через интерфейсы». В качестве возвращающего типа указывается интерфейс / абстрактный класс на вершине иерархии, а классы-наследники могут подставить туда наследника, реализующего этот тип.
Простыми словами: Создает объект, основанный на существующем объекте при помощи клонирования.
Гарантирует, что в однопроцессном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
Простыми словами: Обеспечивает тот факт, что создаваемый объект является единственным объектом своего класса.
Объект для создания других объектов. Формально фабрика — это функция или метод, который возвращает объекты изменяющегося прототипа или класса из некоторого вызова метода, который считается «новым».
Простыми словами: Генерирует экземпляр для клиента, не раскрывая никакой логики.
В Структурных шаблонах рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры.
Предназначен для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.
Простыми словами: Позволяет обернуть несовместимые объекты в адаптер, чтобы сделать их совместимыми с другим классом.
Разделяет абстракцию и реализацию так, чтобы они могли изменяться независимо. Шаблон мост использует инкапсуляцию, агрегирование и может использовать наследование для того, чтобы разделить ответственность между классами.
Простыми словами: Предпочтение композиции над наследованием. Детали реализации передаются из одной иерархии в другой объект с отдельной иерархией.
Объединяет объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково. Паттерн определяет иерархию классов, которые одновременно могут состоять из примитивных и сложных объектов, упрощает архитектуру клиента, делает процесс добавления новых видов объекта более простым.
Простыми словами: Позволяет клиентам работать с индивидуальными объектами в едином стиле.
Динамическое подключение дополнительного поведения к объекту. Шаблон декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.
Простыми словами: Позволяет динамически изменять поведение объекта во время работы, оборачивая их в объект класса декоратора.
Скрывает сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
Простыми словами: Предоставляет упрощенный интерфейс для сложной системы.
Шаблон, при котором объект, представляющий себя как уникальный экземпляр в разных местах программы, по факту не является таковым.
Простыми словами: Минимизация использования памяти или вычислительной стоимости путем разделения ресурсов с наибольшим количеством похожих объектов.
Предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).
Простыми словами: Класс отображает функциональность другого класса.
Поведенческие шаблоны связаны с распределением обязанностей между объектами. Их отличие от структурных шаблонов заключается в том, что они не просто описывают структуру, но также описывают шаблоны для передачи сообщений / связи между ними. Или, другими словами, они помогают ответить на вопрос «Как запустить поведение в программном компоненте?»
Предназначен для организации в системе уровней ответственности.
Простыми словами: цепочка обязанностей помогает строить цепочки объектов. Запрос входит с одного конца и проходит через каждый объект, пока не найдет подходящий обработчик.
Представляет действие. Объект команды заключает в себе само действие и его параметры.
Простыми словами: Позволяет инкапсулировать действия в объекты. Основная идея, стоящая за шаблоном — предоставление средств, для разделения клиента и получателя.
Объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации.
Простыми словами: Представляет способ доступа к элементам объекта без показа базового представления.
Определяет представление грамматики для заданного языка и интерпретатор предложений этого языка. Как правило, данный шаблон применяется для часто повторяющихся операций.
Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность, и избавляя объекты, от необходимости явно ссылаться друг на друга.
Простыми словами: Подразумевает добавление стороннего объекта (посредника) для управления взаимодействием между двумя объектами (коллегами). Шаблон помогает уменьшить связанность (coupling) классов, общающихся друг с другом, ведь теперь они не должны знать о реализациях своих собеседников.
Позволяет, не нарушая инкапсуляцию, зафиксировать и сохранить внутреннее состояние объекта так, чтобы позднее восстановить его в этом состоянии.
Простыми словами: Фиксирует и хранит текущее состояние объекта, чтобы оно легко восстанавливалось.
Создает механизм у класса, который позволяет получать экземпляру объекта этого класса оповещения от других объектов об изменении их состояния, тем самым наблюдая за ними.
Простыми словами: Определяет зависимость между объектами, чтобы при изменении состояния одного из них зависимые от него узнавали об этом.
Используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния.
Простыми словами: Позволяет менять поведение класса при изменении состояния.
Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.
Простыми словами: Позволяет переключаться между алгоритмами или стратегиями в зависимости от ситуации.
Определяет основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
Простыми словами: Определяет каркас выполнения определенного алгоритма, но реализацию самих этапов делегирует дочерним классам.
Описывает операцию, которая выполняется над объектами других классов. При изменении visitor нет необходимости изменять обслуживаемые классы.
Простыми словами: Позволяет добавлять будущие операции для объектов без их модифицирования.