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 相关文章推荐
dojo 之基础篇
Mar 24 Javascript
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
收集的10个免费的jQuery相册
Feb 26 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
Bootstrap中data-target 到底是什么
Feb 14 Javascript
基于Vue实现timepicker
Apr 25 Javascript
React入门教程之Hello World以及环境搭建详解
Jul 11 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
vue实现输入框自动跳转功能
May 20 Javascript
javascript的var与let,const之间的区别详解
Feb 18 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数据库连接
2006/10/09 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
比较搞笑的js陷阱题
2010/02/07 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
如何基于Python创建目录文件夹
2019/12/31 Python
PyQt5实现画布小程序
2020/05/30 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
pytorch实现查看当前学习率
2020/06/24 Python
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
旅游管理毕业生自荐信
2013/11/05 职场文书
高三英语教学反思
2014/01/13 职场文书
小学生作文评语大全
2014/04/21 职场文书
酒店辞职书范文
2015/02/26 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python