- необходимо сохранить снимок состояния объекта (или его части) для последующего восстановления
- прямой интерфейс получения состояния объекта раскрывает детали реализации и нарушает инкапсуляцию объекта
Паттерн Цепочка обязанностей(Chain of responsibility):
- в разрабатываемой системе имеется группа объектов, которые могут обрабатывать сообщения определенного типа;
- все сообщения должны быть обработаны хотя бы одним объектом системы;
- сообщения в системе обрабатываются по схеме «обработай сам либо перешли другому», то есть одни сообщения обрабатываются на том уровне, где они получены, а другие пересылаются объектам иного уровня.
Паттерн Наблюдатель(Observer):
- существует, как минимум, один объект, рассылающий сообщения;
- имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения;
- нет надобности очень сильно связывать взаимодействующие объекты, что полезно для повторного использования.
- обеспечивает обработку команды в виде объекта, что позволяет сохранять её, передавать в качестве параметра методам, а также возвращать её в виде результата, как и любой другой объект.
- используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния.
Паттерн Интерпретатор(Interpreter):
- решает часто встречающуюся, но подверженную изменениям, задачу.
- программа должна обеспечивать различные варианты алгоритма или поведения
- нужно изменять поведение каждого экземпляра класса
- необходимо изменять поведение объектов на стадии выполнения
- введение интерфейса позволяет классам-клиентам ничего не знать о классах, реализующих этот интерфейс и инкапсулирующих в себе конкретные алгоритмы
- позволяет получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из агрегированных объектов.
Паттерн Шаблонный метод(Template method):
- требуется однократное использование инвариантной части алгоритма, с оставлением изменяющейся части на усмотрение наследникам
- необходимы локализация и вычленение общего для нескольких классов кода для избегания дублирования
- требуется разрешение расширения кода наследниками только в определенных местах
- обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.
- предназначен для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.
- предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).
- используется в проектировании программного обеспечения, чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо».
Паттерн Компоновщик(Composite pattern):
- объединяет объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково.
- алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как они стыкуются между собой;
- процесс конструирования должен обеспечивать различные представления конструируемого объекта.
- предназначенный для динамического подключения дополнительного поведения к объекту. Шаблон Декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности.
Паттерн Фабричный метод(Factory method):
- предоставляет подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Иными словами, Фабрика делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне.
- позволяет скрыть сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
- помогает избежать дополнительных усилий по созданию объекта стандартным путем (имеется в виду использование конструктора, т. к. в этом случае также будут вызваны конструкторы всей иерархии предков объекта), когда это непозволительно дорого для приложения.
- помогает избежать наследования создателя объекта (object creator) в клиентском приложении, как это делает паттерн abstract factory.
Паттерн Приспособленец(Flyweight)
- структурный шаблон проектирования, при котором объект, представляющий себя как уникальный экземпляр в разных местах программы, по факту не является таковым.