Sobes.tech
Middle

Implementați o clasă conform pattern-ului Observer (Emitter de evenimente): stocarea abonaților, abonarea la evenimente, dezabonarea de la evenimente, notificarea abonaților.

sobes.tech AI

Răspuns de la 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);

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