Как бы вы реализовали паттерн Observer?

Observer хранит подписчиков, уведомляет их об изменении и предоставляет способ отписки; важно определить поведение при изменении подписок во время рассылки.

Короткий ответ

Что ответить на собеседовании

Observer хранит подписчиков, уведомляет их об изменении и предоставляет способ отписки; важно определить поведение при изменении подписок во время рассылки.

Подробный разбор

Ответ с пояснениями

Observer хранит подписчиков, уведомляет их об изменении и предоставляет способ отписки; важно определить поведение при изменении подписок во время рассылки.

Минимальная синхронная реализация со снимком подписчиков:

function createObservable() {
  const listeners = new Set();
  return {
    subscribe(fn) {
      listeners.add(fn);
      return () => listeners.delete(fn);
    },
    notify(value) {
      for (const fn of [...listeners]) fn(value);
    }
  };
}

Здесь исключение подписчика прерывает рассылку, а снятая во время неё подписка остаётся в текущем снимке. Иную политику нужно задать явно; повторная подписка той же функции не дублируется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее