Sobes.tech
Back to questions
Junior — Middle
50

Можно ли объяснить концепцию и применение паттерна наблюдатель в программировании?

Answer from AI

sobes.tech AI

Паттерн "Наблюдатель" (Observer) используется для организации связи между объектами, где один объект (издатель) уведомляет другие объекты (наблюдатели) об изменениях своего состояния.

Применение:

  • Позволяет реализовать слабую связанность между компонентами.
  • Часто используется в GUI для обновления интерфейса при изменении данных.
  • В системах событий и подписок.

Пример на Python:

class Subject:
    def __init__(self):
        self._observers = []
        self._state = None

    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._state)

    def set_state(self, state):
        self._state = state
        self.notify()

class Observer:
    def update(self, state):
        print(f"Observer received new state: {state}")

subject = Subject()
observer1 = Observer()
observer2 = Observer()

subject.attach(observer1)
subject.attach(observer2)

subject.set_state('Новое состояние')

В этом примере при изменении состояния объекта Subject все подписанные наблюдатели получают уведомление и реагируют на него.