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 getElementsByName()的用法说明
Jul 31 Javascript
js中判断控件是否存在
Aug 25 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
Sep 26 Javascript
JavaScript适配器模式详解
Oct 19 Javascript
Vue shopCart 组件开发详解
Jan 26 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
详解Webpack多环境代码打包的方法
Aug 03 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
Aug 31 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 Javascript
如何在 Vue 表单中处理图片
Jan 26 Vue.js
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使用递归函数实现数字累加的方法
2015/03/16 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
简单实现php上传文件功能
2017/09/21 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
vue使用recorder.js实现录音功能
2019/11/22 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
python 生成目录树及显示文件大小的代码
2009/07/23 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
详解Python中的路径问题
2020/09/02 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
python实现学生信息管理系统源码
2021/02/22 Python
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
计算机操作自荐信
2013/12/07 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python