SOURCE

// 目标者 发布者 主题
class Subject {
    constructor() {
        this.observers = [];
    }

    add(observer) {
        this.observers.push(observer);
    }

    remove(observer) {
        let idx = this.observers.findIndex(item => item === observer);

        idx > -1 && this.observers.splice(idx, 1);
    }

    notify() {
        for (let observer of this.observers) {
            observer.update()
        }
    }
}

// 观察者 订阅
class Observer {
    constructor(name) {
        this.name = name
    }
    update() {
        console.log(`目标者通知我更新,我是: ${this.name}`)
    }
}

let subject = new Subject();
let o1 = new Observer('o1');
let o2 = new Observer('o2');

subject.add(o1);
subject.add(o2);

subject.notify()
console 命令行工具 X clear

                    
>
console