观察者模式
观察者模式通俗点讲就是上帝视角,其核心思想便是一对多。
比方说在游戏公会中,公会中一些集体事件需要分发到每位会员信箱中,由于是同一个消息且分发到不同人手里,这可以称为观察者模式。
每个对象发生改变时,相关依赖对象皆会得到通知并自动更新。
var pubsub = {
list: {
},//存储订阅事件
subscribe: function (key, fn) {
//添加订阅方法
if (!this.list[key]) {
this.list[key] = [];
}
this.list[key].push(fn);
},
publish: function (key,time) {
//发布订阅
for (var index in this.list[key]) {
this.list[key][index].call(this,time);
}
},
unpublish: function (key, fn) {
var that=this;
//取消订阅
if (!that.list[key])
return;
if(!fn)
{
console.log('fn参数不存在!');
}
else{
if(typeof fn=='function')
{
that.list[key].map(function (f,index){
if(f===fn)
{
that.list[key].splice(index,1);
}
});
}
else{
console.log('fn参数不是函数!');
}
}
}
}
//订阅
pubsub.subscribe('gowork',function (time){
console.log("上班了~打卡时间为:"+time);
});
pubsub.subscribe('backwork',work);
function work(time){
console.log("下班了~打卡时间为:"+time);
}
console.log(pubsub.list);
//发布订阅
pubsub.publish('gowork','08:50:00');
pubsub.publish('backwork','17:30:00');
//取消订阅
pubsub.unpublish('backwork',work);
console.log(pubsub.list);