Назад к вопросам
Middle+
70
questionbank
Что такое поведенческие паттерны?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Поведенческие паттерны проектирования описывают взаимодействие между объектами и распределение обязанностей. Они фокусируются на алгоритмах и назначении ответственности между объектами.
Основные поведенческие паттерны:
- Цепочка обязанностей (Chain of Responsibility): Передача запроса по цепочке обработчиков. Каждый обработчик решает, обрабатывать ли запрос или передать его дальше.
- Команда (Command): Инкапсулирует запрос на выполнение определенного действия как объект, позволяя параметризировать клиентов различными запросами, ставить запросы в очередь или протоколировать их, а также поддерживать отмену операций.
- Итератор (Iterator): Предоставляет последовательный доступ к элементам составного объекта, не раскрывая его внутреннего представления.
- Посредник (Mediator): Определяет объект, инкапсулирующий взаимодействие между множеством объектов. Посредник способствует слабой связанности, избавляя объекты от необходимости явно ссылаться друг на друга.
- Хранитель (Memento): Позволяет без нарушения инкапсуляции сохранить и восстановить внешнее состояние объекта.
- Наблюдатель (Observer): Определяет зависимость "один-ко-многим" между объектами. При изменении состояния одного объекта все зависимые от него объекты оповещаются и автоматически обновляются.
- Состояние (State): Позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Объект как будто меняет свой класс.
- Стратегия (Strategy): Определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Позволяет выбирать алгоритм во время выполнения программы.
- Шаблонный метод (Template Method): Определяет скелет алгоритма в операции, оставляя определение некоторых шагов субклассам. Шаблонный метод позволяет подклассам переопределять шаги алгоритма, не изменяя его структуру.
- Посетитель (Visitor): Описывает операцию, выполняемую над каждым элементом структуры объектов. Посетитель позволяет добавить новые операции, не изменяя классы элементов, над которыми они выполняются.
# Пример паттерна Наблюдатель (Observer)
class Subject:
def __init__(self):
self._observers = []
def attach(self, observer):
# Добавление наблюдателя
self._observers.append(observer)
def detach(self, observer):
# Удаление наблюдателя
self._observers.remove(observer)
def notify(self):
# Оповещение всех наблюдателей
for observer in self._observers:
observer.update(self)
class Observer:
def update(self, subject):
# Метод для обновления состояния наблюдателя
print(f"Observer updated. Subject state: {subject._state}")
# Использование
subject = Subject()
observer1 = Observer()
observer2 = Observer()
subject.attach(observer1)
subject.attach(observer2)
subject._state = "New state"
subject.notify() # Вызов update у наблюдателей
Поведенческие паттерны помогают улучшить читаемость, поддерживаемость и расширяемость кода, управляя сложным взаимодействием между объектами.