JS模式之简单的订阅者和发布者模式完整实例


Posted in Javascript onJune 30, 2015

本文实例讲述了JS模式之简单的订阅者和发布者模式。分享给大家供大家参考。具体如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>parten</title>
</head>
<body>
<script>
var singletonTest = SingletonTest.getInstance({
  pointX : 5
});
console.log(singletonTest.pointX);
//easy_Observer_model;
function ObserverList(){
  this.observerList = [];
};
ObserverList.prototype.Add = function(obj){
  return this.observerList.push(obj);
};
ObserverList.prototype.Empty = function(){
  this.observerList = [];
};
ObserverList.prototype.Count = function(){
  return this.observerList.length;
};
ObserverList.prototype.Get = function(index){
  if(index>-1 && index<this.observerList.length)
  return this.observerList[index];
};
ObserverList.prototype.Insert = function(obj,index){
  var pointer = -1;
  if(index == 0){
    this.observerList.unshift(obj);
    pointer = index;
  }else if(index == this.observerList.length){
    this.observerList.push(obj);
    pointer = index;
  };
  return pointer;
};
ObserverList.prototype.IndexOf = function(obj,startIndex){
  var i = startIndex, pointer = -1;
  while(i < this.observerList.length){
    if(this.observerList[i] === obj){
      pointer = i;
    };
    i++
  };
  return pointer;
};
ObserverList.prototype.RemoveIndexAt = function(index){
  if(index === 0){
    this.observerList.shift();
  }else if(index === this.observerList.length-1){
    this.observerList.pop();
  };
  return index;
};
function extend(obj,extension){
  for(var key in obj){
    extension[key] = obj[key];
  }
};
//
function Subject(){
  this.observers = new ObserverList();
};
Subject.prototype.AddObserver = function(obj){
  this.observers.add(obj)
};
Subject.prototype.RemoveObserver = function(observer){
  this.observers.removeIndexAt( this.observers.IndexOf(observer,0) );
};
Subject.prototype.Notify = function(context){
  var observerCount = this.observers.count();
  for(var i=0; i<observerCount; i++){
    this.observers.Get(i).update(context);
  };
}
//Pubsub//subscribe
var Pubsub = {};
(function(q){
  var topics = [],
    subUid = -1;
  q.publish = function(topic,args){
    if(!topics[topic]){
      return false;
    };
    var subscribers = topics[topic],
      len = subscribers ? subscribers.length : 0;
    while(len--){
      subscribers[len].func(topic,args);
    }
    return this;
  };
  q.subscribe = function(topic,func){
    if(!topics[topic]){
      topics[topic] = [];
    };
    var token = (++subUid).toString();
    topics[topic].push({
      token : token,
      func : func
    });
    return token;
  };
  q.unsubscribe = function(token){
    for(var m in topics){
      if(topics[m]){
        for(var i=0; i<topics[m].length; i++){
          if(topics[m][i].token === token){
            topics[m].splice(i,1);
            return token;
          }
        }
      };
    };
    return this;
  }
})(pubsub);
</script>
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
关于URL中的特殊符号使用介绍
Nov 03 Javascript
js数组的操作详解
Mar 27 Javascript
jquery如何扑捉回车键触发的事件
Apr 24 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
Aug 08 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
Sep 14 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
Dec 29 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
js点击事件的执行过程实例分析【冒泡与捕获】
Apr 11 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 Javascript
原生js+css实现tab切换功能
Sep 17 Javascript
7个你应该知道的JS原生错误类型
Apr 29 Javascript
JS模式之单例模式基本用法
Jun 30 #Javascript
js简单工厂模式用法实例
Jun 30 #Javascript
JavaScript判断undefined类型的正确方法
Jun 30 #Javascript
超赞的动手创建JavaScript框架的详细教程
Jun 30 #Javascript
JavaScript中Null与Undefined的区别解析
Jun 30 #Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
Jun 30 #Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 #Javascript
You might like
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
详解VUE 数组更新
2017/12/16 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
Python中decorator使用实例
2015/04/14 Python
Python for循环中的陷阱详解
2018/07/13 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
python编写计算器功能
2019/10/25 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
学院领导推荐信
2013/10/30 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
医药工作岗位求职信分享
2013/12/31 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
2015年公司新年寄语
2014/12/08 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
小数乘法教学反思
2016/02/22 职场文书
教学反思怎么写
2016/02/24 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android