观察者模式又称发布/订阅模式   publish/subscribe

  它是一种一对多的关系,让多个观察者对象同时监听某一主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得他们能够自动更新自己。

  1. function msgBus(){
  2.  
  3. var msgMap = {}; // internal message bus
  4. var instance = {};
  5.  
  6. /**
  7. * @function subscribe
  8. * @description subscribe message listener.
  9. * @param msgType {string} - message type to be listen.
  10. * @param handler {function} - handler function when the message sent.
  11. * @instance
  12. */
  13. instance.subscribe = function(msgType,handler){
  14. if(msgType == null){
  15. console.error("Message type is null");
  16. return instance;
  17. }
  18. if(handler == null){
  19. console.error("handler is null");
  20. return instance;
  21. }
  22. var subscribeArray = msgMap[msgType];
  23. if(subscribeArray == null){
  24. subscribeArray = new Array();
  25. msgMap[msgType] = subscribeArray;
  26. }
  27. if(subscribeArray.indexOf(handler) < 0){
  28. subscribeArray.push(handler);
  29. }
  30. return instance;
  31. }
  32.  
  33. /**
  34. * @function unsubscribe
  35. * @description unsubscribe message listener.
  36. * @param msgType {string} - message type to be unsubscribe.
  37. * @param handler {function} - handler function to be removed.
  38. * @instance
  39. */
  40.  
  41. instance.unsubscribe = function(msgType,handler){
  42. var subscribeArray = msgMap[msgType];
  43. if(subscribeArray != null){
  44. var index = subscribeArray.indexOf(handler);
  45. if(index > 0){
  46. subscribeArray.splice(index,1);
  47. }
  48. }
  49.  
  50. return instance;
  51. }
  52.  
  53. /**
  54. * @function publish
  55. * @description publish message.
  56. * @param msgType {string} - message type to be published.
  57. * @param data {object} - message data.
  58. * @instance
  59. */
  60. instance.publish = function(msgType,data){
  61. var subscribeArray = msgMap[msgType];
  62. if(subscribeArray == null){
  63. return;
  64. }
  65. for(var i=0;i<subscribeArray.length;i++){
  66. try{
  67. subscribeArray[i](data);
  68. }catch(e){
  69. console.error("Error when sending Message: "+msgType);
  70. }
  71. }
  72.  
  73. return instance;
  74. }
  75.  
  76. return instance;
  77. }

测试一下:

  1. var instance = msgBus();
  2. instance.subscribe("subscribe",function(data){console.log("this is "+data)});
  3.  
  4. instance.publish("subscribe","cangjingkong"); // this is cangjingkong

javascript设计模式之观察者模式的更多相关文章

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

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

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

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

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

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

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

    观察者模式又叫发布——订阅模式,顾名思义pub——sub就是被动触发的,:不要给我......,我会给你.......就是一个发布订阅的解释,实质就是对程序中的某个对象状态进行监听观察,并且在该对象发 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. JSP内置对象---request 对象

    request.jsp: <%@ page language="java" import="java.util.*" contentType=" ...

  2. JS设置弹出小窗口。

    经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项.版权信息.警告.欢迎光顾之类的话或者作者想要特别提示的信息.其实制作这 ...

  3. SQLserver日期函数

      ------------------日期转化成年月日时分秒毫秒--------------- select 'R'+CONVERT(varchar(100), GETDATE(), 112)+ri ...

  4. centos 下git服务器搭建

    准备 CentOS Linux release 7.0.1406 (Core) ssh 22端口 http 80端口 本文主要是ssh协议支持,http协议配置后还有问题. 摘抄的一段说明 SSH 协 ...

  5. 一维码生成 c# winform GUI

    最近看到同事小红在做一维码,感觉挺好玩,于是就在网上找了一个例子来玩玩. 下面的代码均为网上的代码,做了一些整理,但是忘记了出处,原作者看到可以提醒我,谢谢. 首先,一维码的相关知识可以先百度一下:h ...

  6. 开始学习Dojo

    学习:Dojo入门简易教程 Dojo Toolkit 简介 Dojo 于 2004 年创建,使开发 DHTML 和 JavaScript web 应用程序开发流程更为容易,隐藏了很多现代 web 浏览 ...

  7. 第一章 web应用程序开发原理

    [总结] 1.计算机模式  :主机  哑端计算机模式 优点:速度快  反应快 维护修理方便 数据安全性高 缺点:单台计算机安全操作 应用程序难维护 难以跨出平台 客户端 客户计算机模式 优点:速度快 ...

  8. Windows平台下PHP环境搭建

    在Windows平台上搭建PHP的开发环境可以下载WAMP(Windows.Apache.MySQL.PHP的首字母缩写)集成化安装包.这样就不需要单独安装Apache.MySQL和PHP了. 这款软 ...

  9. aspx前台调用cs后台方法

    随着对于mvc的习惯使用,aspx页面渐渐用的不怎么用了,主要是生命周期感觉上比较慢,要么就用html+handler一般处理程序来装下逼.虽然不用,但还是要给刚工作的人讲下,相信不少人都想过:既然前 ...

  10. 黑马----JAVA迭代器详解

    JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...