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 相关文章推荐
Javascript基础教程之比较操作符
Jan 18 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
Sep 04 Javascript
JS中setTimeout的巧妙用法前端函数节流
Mar 24 Javascript
JS中frameset框架弹出层实例代码
Apr 01 Javascript
Bootstrap开发实战之第一次接触Bootstrap
Jun 02 Javascript
vue父组件通过props如何向子组件传递方法详解
Aug 16 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
vue iView 上传组件之手动上传功能
Mar 16 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
Nov 19 Javascript
使用原生javascript开发计算器实例代码
Feb 21 Javascript
详解Javascript实践中的命令模式
May 05 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
农民C键的运用技巧
2020/03/04 星际争霸
如何利用php+mysql保存和输出文件
2006/10/09 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
JS分页效果示例
2013/10/11 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python中操作MySQL入门实例
2015/02/08 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
Python实现图像的垂直投影示例
2020/01/17 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
大学生物业管理求职信
2013/10/24 职场文书
怎么写好自荐信
2013/10/30 职场文书
关于迟到的检讨书
2014/01/26 职场文书
学术会议邀请函
2015/01/30 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript