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 null和undefined区别分析
Oct 14 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
jQuery侧边栏随窗口滚动实现方法
Mar 04 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
浅谈javascript中call()、apply()、bind()的用法
Apr 20 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
Jul 28 Javascript
详解Vue中一种简易路由传参办法
Sep 15 Javascript
vue多页面开发和打包正确处理方法
Apr 20 Javascript
js神秘的电报密码 哈弗曼编码实现
Sep 10 Javascript
javascript 原型与原型链的理解及实例分析
Nov 23 Javascript
jquery实现直播弹幕效果
Nov 28 jQuery
jquery实现直播视频弹幕效果
Feb 25 jQuery
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 JSON格式数据交互实例代码详解
2011/01/13 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
php三元运算符知识汇总
2015/07/02 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
python判断数字是否是超级素数幂
2018/09/27 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
python微信好友数据分析详解
2018/11/19 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python对csv文件追加写入列的方法
2019/08/01 Python
python @classmethod 的使用场合详解
2019/08/23 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
写给保洁员表扬信
2014/01/08 职场文书
临床专业自荐信
2014/06/22 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang