Sobes.tech
Middle

Implementieren Sie eine Klasse nach dem Observer-Muster (Observer / Event Emitter): Speicherung von Abonnenten, Abonnieren von Ereignissen, Abbestellen von Ereignissen, Benachrichtigung der Abonnenten.

sobes.tech KI

Antwort von 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);

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