PassFront
  1. PassFront
  2. База знаний
  3. Поведенческие паттерны

Что такое паттерн Observer и где он используется?

Поведенческие паттерны

Observer устанавливает зависимость «один ко многим»: субъект хранит список подписчиков и уведомляет их об изменениях, не зная о них ничего, кроме интерфейса.

Механика

  • Методы subscribe(listener), unsubscribe(listener), notify(event).
  • Push-модель: субъект сам шлёт данные событием; pull-модель: подписчик забирает состояние по ссылке на субъект.

Где живёт

События интерфейса, реактивные библиотеки, EventEmitter в Node, брокеры publish-subscribe (там посредник вынесен отдельно).

Подводные камни

  • Утечки памяти: забытый unsubscribe удерживает подписчика — спасают слабые ссылки и явные отписки.
  • Порядок и количество уведомлений не гарантированы; каскады событий усложняют отладку.
  • Синхронный notify исполняет подписчиков в потоке субъекта: один медленный тормозит всех.

Коротко для собеседования

Observer — это подписка: субъект держит список слушателей и вызывает их при изменении, не зная их конкретных типов. Так устроены DOM-события и EventEmitter; главная практическая ловушка — забытая отписка, которая удерживает подписчиков в памяти.

Другие вопросы раздела