Sobes.tech
Назад к вопросам
Middle
6

Реализовать класс по паттерну Наблюдатель (Observer / Event Emitter): хранение подписчиков, подписка на событие, отписка от события, уведомление подписчиков.

Компании, где спрашивали
Basis

Ответ от нейросети

sobes.tech AI

Ниже пример реализации паттерна Наблюдатель (Observer) на JavaScript, который хранит подписчиков, позволяет подписываться, отписываться и уведомлять их:

class EventEmitter {
  constructor() {
    this.subscribers = {};
  }

  // Подписка на событие
  on(event, callback) {
    if (!this.subscribers[event]) {
      this.subscribers[event] = [];
    }
    this.subscribers[event].push(callback);
  }

  // Отписка от события
  off(event, callback) {
    if (!this.subscribers[event]) return;
    this.subscribers[event] = this.subscribers[event].filter(cb => cb !== callback);
  }

  // Уведомление подписчиков
  emit(event, data) {
    if (!this.subscribers[event]) return;
    this.subscribers[event].forEach(callback => callback(data));
  }
}

// Пример использования:
const emitter = new EventEmitter();

function onOrderStatusChange(status) {
  console.log('Статус заказа изменился на:', status);
}

emitter.on('orderStatus', onOrderStatusChange);
emitter.emit('orderStatus', 'Выполнен');
emitter.off('orderStatus', onOrderStatusChange);

Такой класс позволяет гибко управлять подписками и уведомлениями.