// 创建一个发布者类class Publisher { constructor() { this.observers = []; console.log("init"); } // 增加订阅者 add(observer) { console.log("add"); this.observers.push(observer); } // 移除订阅者 remove(observer) { console.log("remove"); this.observers.forEach((item, index) => { if (item === observer) { this.observers.splice(); } }); } // 通知所有订阅者 notify() { console.log("notify"); this.observers.forEach((observer) => { observer.update(this); }); }}// 创建一个订阅者类class Observer { constructor() { console.log("observer"); } update() { console.log("update"); }}class PrdPublisher extends Publisher { constructor() { super(); this.prdState = null; this.observers = []; console.log("PrdPublisher init"); } // 该方法用于获取当前的prdState getState() { console.log("getState"); return this.prdState; } // 改变prdState的状态 setState(state) { console.log("set"); this.prdState = state; this.notify(); }}class DeveloperObserver extends Observer { constructor() { super(); this.prdState = {}; console.log("developer init"); } // 重写一个update的方法 update(publisher) { console.log("new update"); // 更新需求文档 this.prdState = publisher.getState(); // 开始工作 this.work(); } // work 开始搬砖 work() { const prd = this.prdState; console.log("996 begins...", prd); }}const pika = new DeveloperObserver()const A = new DeveloperObserver()const B = new DeveloperObserver()const xx = new PrdPublisher()const prd = { name: '1231'}xx.add(pika)xx.add(A)xx.add(B)xx.setState(prd)