В чем разница между Observer и Publisher Subscriber

«В чем разница между Observer и Publisher Subscriber» — вопрос из категории Паттерны, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Pub/Sub — более гибкий: издатели (Publishers) и подписчики (Subscribers) общаются через посредника (Event Channel), не зная друг о друге.

Пример Observer:

class Subject {
  constructor() {
    this.observers = [];
  }
  notify(data) {
    this.observers.forEach(observer => observer.update(data));
  }
}

Пример Pub/Sub:

const events = {};
function subscribe(event, callback) {
  if (!events[event]) events[event] = [];
  events[event].push(callback);
}
function publish(event, data) {
  events[event]?.forEach(cb => cb(data));
}

Ключевые отличия:

  1. В Observer связь прямая, в Pub/Sub — через брокер
  2. Pub/Sub позволяет более слабую связанность компонентов
  3. Observer обычно синхронный, Pub/Sub часто асинхронный