// Es5
function Serve() {
this.obList = [];
}
Serve.prototype = {
addServe(o) {
console.log(o.name + '订阅了')
this.obList.push(o);
},
removeServe(o) {
for (var i = 0; i < this.obList.length; i++) {
if (this.obList[i] === o) {
console.log(o.name + '取消订阅')
this.obList.splice(i, 1)
break;
}
}
},
notifyServe(msg) {
for (var i = 0; i < this.obList.length; i++) {
const ob = this.obList[i];
console.log('通知订阅者' + ob.name)
ob.update(msg)
}
}
}
function ObUser(name) {
this.name = name;
}
ObUser.prototype = {
update(msg) {
console.log('收到通知,并更新')
this.message(msg)
},
message(msg) {
console.log(this.name + '========接收=======' + msg)
}
}
const serve = new Serve();
const user01 = new ObUser('张三');
const user02 = new ObUser('李四');
const user03 = new ObUser('王五');
// 添加订阅
serve.addServe(user01)
serve.addServe(user02)
serve.addServe(user03)
// 发布消息
serve.notifyServe('拼夕夕全场9.9包邮,购物有礼,返卷返红包,数量有限,快来抢购吧')
// 取消订阅
console.log('李四在拼夕夕买了一把锁,发现买回来没要钥匙,感觉自己的多年教育受到了奇耻大辱。于是')
serve.removeServe(user02)
// 再次发布消息
serve.notifyServe('拼夕夕,最低价只需要0.01元,还包邮,闻所未闻的优惠,先到先到哦')
// 全部取消
console.log('张三受不了,这样的诱惑信息,进去买了一把伞,收到货后,于是')
serve.removeServe(user01)
console.log('王五家里有点钱,买东西都要买贵的,不贵的不要,越贵他越兴奋,上次买个膜,花了18.8万,他很遗憾的离开了。于是')
serve.removeServe(user03)
// 再次发布消息 + 无奈他们再也接收不到这个通知了
serve.notifyServe('于是拼夕夕倒闭了,这条订阅消息再也无人能够接收。')
简单粗暴,快速学习观察者模式,订阅者模式。
最新推荐文章于 2022-06-22 08:15:56 发布