观察者模式又叫发布——订阅模式,顾名思义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 设计模式之观察者模式的更多相关文章

  1. JavaScript设计模式之观察者模式(学习笔记)

    设计模式(Design Pattern)对于软件开发来说其重要性不言而喻,代码可复用.可维护.可扩展一直都是软件工程中的追求!对于我一个学javascript的人来说,理解设计模式似乎有些困难,对仅切 ...

  2. 再起航,我的学习笔记之JavaScript设计模式18(观察者模式)

    观察者模式 观察者模式(Observer): 又被称为发布-订阅者模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合. 创建一个观察者对象 首先我们创建一个闭包对象,让其在页面加 ...

  3. JavaScript设计模式-22.观察者模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. javascript设计模式之观察者模式

    观察者模式又称发布/订阅模式   publish/subscribe 它是一种一对多的关系,让多个观察者对象同时监听某一主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得他们能够自动 ...

  5. JavaScript设计模式(10)-观察者模式

    观察者模式 1. 介绍 发布者与订阅者是多对多的方式 通过推与拉获取数据:发布者推送到订阅者或订阅者到发布者那边拉 使并行开发的多个实现能彼此独立地进行修改 其实我们在前端开发中使用到的时间监听就是浏 ...

  6. JavaScript设计模式与开发实践 - 观察者模式

    概述 观察者模式又叫发布 - 订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个目标对象(为了方便理解,以下将观察者对象叫做订阅者,将目标对象叫做 ...

  7. javaScript 设计模式系列之一:观察者模式

    介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),一个目标对象管理所有相依于它的观察者对象.该模式中存在两个角色:观察者和被观察者.目标对象与观察者之间的抽象耦合关系能够单独扩展 ...

  8. Javascript设计模式之我见:观察者模式

    大家好!本文介绍观察者模式及其在Javascript中的应用. 模式介绍 定义 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新. 类图及说明 S ...

  9. [转] JavaScript设计模式之发布-订阅模式(观察者模式)-Part1

    <JavaScript设计模式与开发实践>读书笔记. 发布-订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖它的对象都将得到通知. 例如 ...

随机推荐

  1. 解析ASP.NET Mvc开发之查询数据实例

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 ------------------------------------------------- ...

  2. mongo(四)索引

    mongo(四)索引 根据这里http://www.cnblogs.com/huangxincheng/archive/2012/02/29/2372699.html   首先,需要构造一些数据,如下 ...

  3. [C#] 编程控制笔记本蓝牙与外部蓝牙设备通信

    一.蓝牙模块XLBT232‐D01介绍(外部设备蓝牙) 1.1.蓝牙模块简介 XLBT232-D0101蓝牙模块采用CSR BlueCore 芯片,配置6-8Mbit 的软件存储空间, 支持AT 指令 ...

  4. Linux:Linux 重要人物

    1.Ken Thompson:C 语言之父和 UNIX 之父 2.Dennis Ritchie:C 语言之父和 UNIX 之父 3.Stallman:著名黑客,GNU 创始人,开发了 Emacs.gc ...

  5. Windows 8.1 开发过程中遇到的小问题

    最近在开发Windows 8 应用的时候碰到了一个莫名的问题,错误内容如下:(其中 **.DLL是本地创建的项目,在主项目中添加了引用,其中大部分代码是MVVM light 框架库的代码) Syste ...

  6. cookie and session

    Session is used to save the message for the hole period of user dialogue in web service.Such as the ...

  7. mysql join 查询图

    mysql join 查询,特别是对查两个表之间的差集,可以用table字段=null来做. 注意千万不是join on XX!=XX  ,这样出来的结果是错误的.

  8. Cento OS 6.5 YUM 安装 R 的方法

    (1)配置yum (2)安装EPEL YUM源 yum install  epel-release 修改源配置文件/etc/yum.repos.d/epel.repo ,把基础的恢复,镜像的地址注释掉 ...

  9. fir.im Weekly - 每个程序员都应当拥有的技能树

    本周收集了一些优秀的 iOS & Android 开发资源和程序员 IT 技能拓展的 Tips. 知道创宇研发技能表 v3.0 作为程序员可能都听说过[知道创宇],他们是一家黑客文化浓厚的安全 ...

  10. 分析一个C语言程序生成的汇编代码-《Linux内核分析》Week1作业

    署名信息 郭春阳 原创作品转载请注明出处 :<Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 C源码 这 ...