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 相关文章推荐
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
Apr 27 Javascript
Jquery 的扩展方法总结
Oct 01 Javascript
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
分享一个自己写的简单的javascript分页组件
Feb 15 Javascript
js改变embed标签src值的方法
Apr 10 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
Dec 03 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
Jan 28 Javascript
JS、jQuery中select的用法详解
Apr 21 Javascript
前端框架Vue.js构建大型应用浅析
Sep 12 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
Apr 22 Javascript
iview中Select 选择器多选校验方法
Mar 15 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计划任务、定时执行任务的实现代码
2011/04/23 PHP
解析yii数据库的增删查改
2013/06/20 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
Move.js入门
2017/02/08 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
Python sys.path详细介绍
2013/10/17 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
一套软件开发工程师笔试题
2015/05/18 面试题
文明好少年事迹材料
2014/08/19 职场文书
端午节活动总结报告
2015/02/11 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
关于幸福的感言
2015/08/03 职场文书
远程教育学习心得体会
2016/01/23 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers