class Subject { constructor() { this.observers = []; } subscribe(observer) { if (!observer || typeof observer.update !== 'function') return; this.observers.push(observer); } unsubscribe(observer) { this.observers = this.observers.filter(o => o !== observer); } unsubscribeAll() { this.observers = []; } notifySubscribers(source, ...others) { for (let observer of this.observers) { observer.update(source, ...others); } } } export { Subject };