Observer & Singleton Patterns
What is the best way to implement unsubscribe functionality in the Observer Pattern?
class EventEmitter {
constructor() {
this.listeners = new Map();
}
on(event, callback) {
if (!this.listeners.has(event)) {
this.listeners.set(event, new Set());
}
this.listeners.get(event).add(callback);
return () => {
this.listeners.get(event)?.delete(callback);
if (this.listeners.get(event)?.size === 0) {
this.listeners.delete(event);
}
};
}
emit(event, data) {
this.listeners.get(event)?.forEach(callback => callback(data));
}
}