首页 > 编程语言 > 详细

javascript 设计模式之观察者模式

时间:2015-03-24 01:07:26      阅读:270      评论:0      收藏:0      [点我收藏+]

观察者模式又叫发布——订阅模式,顾名思义pub——sub就是被动触发的,:不要给我......,我会给你.......就是一个发布订阅的解释,实质就是对程序中的某个对象状态进行监听观察,并且在该对象发生改变时能得到通知,下面我通过一个通用的Observer来方便对象实现发布订阅,

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);
        }
      }
  },

      //使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);
  }
};

Observer.makeObserver(person1);//实现person1对象的发布
Observer.makeObserver(person2);//实现person2对象的发布
//-----------------------------------------------------------------订阅对象

var tom = {
  read: function(what){//订阅方法
    console.log("Tom看到了如下信息:" + what);
  }
};
var jack = {
  show: function(what){
    console.log(‘jack看到了如下信息:‘ + what)
  }
}

person1.addSub(tom.read);
person1.addSub(jack.show);
person1.recommend("123");

console.log("........移除jack的订阅..............");
person1.removeSub(jack.show);
person1.recommend("678");
console.log(".............................");

person2.addSub(jack.show);
person2.recommend("456");

javascript 设计模式之观察者模式

原文:http://www.cnblogs.com/ajun/p/4361371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!