Sobes.tech
Middle
28

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

Сұралған компаниялар
Basis

AI-дан жауап

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

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