PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое паттерн Observer?

Продвинутые темы

Паттерн Observer (наблюдатель) — это поведенческий паттерн, в котором объект (субъект) хранит список подписчиков и уведомляет их об изменениях своего состояния.

Идея

Один объект (subject/publisher) публикует события, много объектов (observers/subscribers) на них подписаны и реагируют. Субъект не знает деталей подписчиков — слабая связанность.

class Subject {
  #observers = new Set();
  subscribe(fn) { this.#observers.add(fn); return () => this.#observers.delete(fn); }
  notify(data) { this.#observers.forEach((fn) => fn(data)); }
}

const subject = new Subject();
const unsub = subject.subscribe((d) => console.log('получил', d));
subject.notify('событие'); // все подписчики уведомлены
unsub(); // отписка

Где встречается

  • DOM-события — addEventListener (подписка на события элемента).
  • Реактивность — стор уведомляет UI об изменениях (Redux subscribe, RxJS, Vue reactivity).
  • EventEmitter в Node.js.

Observer против Pub/Sub

  • Observer — субъект напрямую знает подписчиков.
  • Pub/Sub — через посредника (шину событий), издатель и подписчик не знают друг о друге.

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

Observer — паттерн, где субъект хранит подписчиков и уведомляет их об изменениях (subscribe/notify). Слабо связывает объекты. Основа DOM-событий, реактивных сторов и EventEmitter. Отличается от Pub/Sub наличием прямой связи субъект-наблюдатель.

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