// 创建一个发布者类
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)