Middle
Implementar uma classe segundo o padrão Observer (Emitter de Eventos): armazenamento de assinantes, assinatura de eventos, cancelamento de assinatura, notificação de assinantes.
sobes.tech IA
Resposta da IA
Ниже пример реализации паттерна Наблюдатель (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);
Такой класс позволяет гибко управлять подписками и уведомлениями.