觀察者模式又叫發佈——訂閱模式,顧名思義pub——sub就是被動觸發的,:不要給我......,我會給你.......就是一個發佈訂閱的解釋,實質就是對程序中的某個對象狀態進行監聽觀察,而且在該對象發生改變時能獲得通知,下面我經過一個通用的Observer來方便對象實現發佈訂閱,this
var Observer = {
addSub: function(callback){
this._subList.push(callback);
},
removeSub: function(callback){
for(var i=0; i<this._subList.length; i++){
if(this._subList[i] === callback){
delete this._subList[i];
}
}
},
publish: function(what){
for(var i=0; i<this._subList.length; i++){
if(typeof this._subList[i] === "function"){
this._subList[i](what);
}
}
},server
//使object是發佈訂閱對象
makeObserver: function(obj){
for(var key in this){
obj[key] = this[key];
obj._subList = [];
}
}
};
//-----------------------------------------------------------------發佈對象對象
var person1 = {
recommend: function(str){
var msg = "person1 發佈的數據 " + str;
this.publish(msg);
}
};
var person2 = {
recommend: function(str){
var msg = "person2 發佈的數據 " + str;
this.publish(msg);
}
};rem
Observer.makeObserver(person1);//實現person1對象的發佈
Observer.makeObserver(person2);//實現person2對象的發佈
//-----------------------------------------------------------------訂閱對象io
var tom = {
read: function(what){//訂閱方法
console.log("Tom看到了以下信息:" + what);
}
};
var jack = {
show: function(what){
console.log('jack看到了以下信息:' + what)
}
}console
person1.addSub(tom.read);
person1.addSub(jack.show);
person1.recommend("123");function
console.log("........移除jack的訂閱..............");
person1.removeSub(jack.show);
person1.recommend("678");
console.log(".............................");object
person2.addSub(jack.show);
person2.recommend("456");List