观察者监听被观察者的变化,被观察者发生改变时,通知所有的观察者
订阅微信公众号、接收文章推送的过程,也是一个典型的应用观察者模式的例子
//观察者模式
//被观察者:属性(被观察者,观察者列表),方法(加人,删人,发布)
//观察者:属性(观察者),方法(更新)
class Observed{
constructor(topic){
this.topic = topic;
this.list = new Set();
}
addObserve(ob){
this.list.add(ob);
}
delObserve(ob){
this.list.delete(ob);
}
publish(article){
for (const ob of this.list) {
ob.update(this.topic,article)
}
}
}
class Observe{
constructor(name){
this.name = name
}
update(topic,article){
console.log(`${this.name} 接收到了 ${topic} 推送的 ${article}`);
}
}
//测试
let WeChat = new Observed('美团外卖');
let zs = new Observe('张三');
let ls = new Observe('李四');
WeChat.addObserve(zs);
WeChat.addObserve(ls);
WeChat.publish('每月18日领取大额优惠卷')
//张三 接收到了 美团外卖 推送的 每月18日领取大额优惠卷
//李四 接收到了 美团外卖 推送的 每月18日领取大额优惠卷
WeChat.addObserve(zs);
WeChat.delObserve(ls);
WeChat.publish('超大15元包来袭')
//张三 接收到了 美团外卖 推送的 超大15元包来袭