Назад к вопросам
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 у наблюдателей

Поведенческие паттерны помогают улучшить читаемость, поддерживаемость и расширяемость кода, управляя сложным взаимодействием между объектами.