28 lines
503 B
JavaScript
28 lines
503 B
JavaScript
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 };
|