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

В чем разница между Listener и Observer?

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

Listener и Observer оба реагируют на события/изменения, но Listener — это конкретная функция-обработчик события, а Observer — объект/паттерн подписки на изменения состояния субъекта.

Listener (слушатель)

Функция, привязанная к конкретному событию элемента/эмиттера. Реагирует на дискретные события:

button.addEventListener('click', listener); // listener — функция-обработчик
emitter.on('data', listener);
  • Простая связь: событие → обработчик.
  • Часто много слушателей на разные события.
  • Термин из событийной модели DOM/EventEmitter.

Observer (наблюдатель)

Объект, подписанный на изменения состояния субъекта (паттерн Observer). Субъект уведомляет всех наблюдателей:

subject.subscribe(observer); // observer реагирует на изменения субъекта
  • Паттерн проектирования: субъект хранит список наблюдателей, уведомляет их при изменении.
  • Реагирует на изменение состояния, не обязательно на дискретное событие.
  • Примеры: MobX, RxJS, реактивность.

Различия

  • Listener — функция-обработчик конкретного события (событийная модель).
  • Observer — объект-подписчик на изменения состояния (паттерн проектирования).
  • Listener проще и «плоский»; Observer — структурированный паттерн с субъектом и уведомлениями.

На практике

Термины часто пересекаются: addEventListener реализует идею наблюдения. Но формально Observer — паттерн, Listener — обработчик.

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

Listener — функция-обработчик конкретного события (addEventListener, событийная модель). Observer — объект-подписчик на изменения состояния субъекта (паттерн Observer, как в MobX/RxJS). Listener проще и про дискретные события; Observer — структурированный паттерн уведомления об изменениях состояния.

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