Поведенческие шаблоны
Поведенческие шаблоны описывают типовые способы взаимодействия объектов и распределения ответственности между ними.
Их цель - сделать коммуникацию между компонентами более гибкой: снизить связанность, упростить расширение поведения и избежать жестких зависимостей в логике взаимодействия.
Какие шаблоны входят в группу
- Цепочка обязанностей: передает запрос по цепочке обработчиков.
- Команда: инкапсулирует запрос в объект.
- Интерпретатор: описывает элементы языка и правила их обработки.
- Итератор: предоставляет последовательный доступ к элементам коллекции.
- Посредник: централизует взаимодействие между объектами.
- Снимок: сохраняет и восстанавливает внутреннее состояние объекта.
- Null Object: предоставляет объект с нейтральным поведением вместо
null. - Наблюдатель: уведомляет подписчиков об изменениях состояния.
- Состояние: меняет поведение объекта при изменении его состояния.
- Стратегия: инкапсулирует взаимозаменяемые алгоритмы.
- Шаблонный метод: задает каркас алгоритма с вариативными шагами.
- Посетитель: добавляет новые операции над структурой объектов без изменения их классов.
Когда использовать поведенческие шаблоны
- Когда нужно уменьшить связанность между отправителями и получателями сообщений.
- Когда алгоритмы и правила взаимодействия должны меняться без переписывания клиентского кода.
- Когда важно четко разделить ответственность между объектами.
- Когда требуется расширять поведение системы без изменения существующих классов.
Практические ориентиры
Chain of Responsibility,Command,MediatorиObserverрешают задачу развязки отправителя и получателя, но с разными компромиссами.CommandиMementoчасто используются как отложенные "токены": команда хранит действие, снимок - состояние.MediatorиObserverмогут конкурировать: первый централизует коммуникацию, второй распределяет ее через подписки.StateиStrategyпохожи по структуре, но отличаются намерением применения.Template MethodиStrategyвариативно настраивают алгоритм разными способами: через наследование и делегирование.Visitorхорошо работает с объектными структурами, где часто добавляются новые операции.
Источник
Материал страницы основан на обзоре SourceMaking: