标签:
观察者模式
百度百科中解释:是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
两要素:被观察者(一个)、观察者(多个)
干了什么:被观察者发生了某种变化,通知观察者,观察者进行各自的处理
JS简单模拟:
//观察者接口
var ISubscriber = function(){
var subName = arguments[0];
return function(){
console.log("我是"+subName,"我收到了"+arguments[0]);
}
};
//两个具体的观察者
var XM = ISubscriber("小明");
var XA = ISubscriber("小暗");
//被观察者
var Pub_sub = function(){
//注册容器
var subList = [];
//操作方法
var pub = {
//注册观察者
add:function(){
subList.push(arguments[0]);
},
//取消注册观察者
remove:function(){
for(var i=0;i<subList.length;i++){
if(arguments[0] == subList[i]){
subList.splice(i,1);
i--;
}
}
},
//向注册了的观察者发送通知
send:function(){
for(var i=0;i<subList.length;i++){
(subList[i])(arguments[0]);
}
if(i == 0){console.log("我是小明和小暗他爹,他们都失联了")}
console.log("--------------------------")
}
};
return pub;
};
var Publisher = Pub_sub();
//注册两个不同的观察者
Publisher.add(XM);
Publisher.add(XA);
Publisher.send("第一条消息");
//取消注册其中一个观察者
Publisher.remove(XM);
Publisher.send("第二条消息");
//把上步取消注册的观察者又添加回来
Publisher.add(XM);
Publisher.send("第三条消息");
//取消注册另一个观察者
Publisher.remove(XA);
Publisher.send("第四条消息");
//注册一个已存在的观察者
Publisher.add(XM);
Publisher.send("第五条消息");
//取消注册两个相同的观察者
Publisher.remove(XM);
Publisher.send("第六条消息");
jQuery.Callbacks
标签:
原文地址:http://www.cnblogs.com/get-rabbits/p/4310866.html