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);
Такой класс позволяет гибко управлять подписками и уведомлениями.