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 相关文章推荐
JS代码优化技巧之通俗版(减少js体积)
Dec 23 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
Sep 24 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
javacript获取当前屏幕大小
Jun 04 Javascript
JS 调用微信扫一扫功能
Dec 22 Javascript
angular-cli修改端口号【angular2】
Apr 19 Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
详解各版本React路由的跳转的方法
May 10 Javascript
详解vue axios用post提交的数据格式
Aug 07 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
Sep 16 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中extract()函数的妙用分析
2012/07/11 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
IE的fireEvent方法概述及应用
2013/02/22 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
js 图片转base64的方式(两种)
2018/04/24 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
使用Tkinter制作信息提示框
2020/02/18 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
Delphi工程师笔试题
2013/09/21 面试题
服务员岗位责任制
2014/02/11 职场文书
房地产广告词大全
2014/03/19 职场文书
租房协议书样本
2014/08/20 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
python3读取文件指定行的三种方法
2021/05/24 Python
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers