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 Event学习第三章 早期的事件处理程序
Feb 07 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
div模拟选择框示例代码
Nov 03 Javascript
js控制淡入淡出示例代码
Nov 12 Javascript
Area 区域实现post提交数据的js写法
Apr 22 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 Javascript
AngularJS改变元素显示状态
Apr 20 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
深入浅析JSONAPI在PHP中的应用
Dec 24 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 Javascript
关于JS模块化的知识点分享
Oct 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下使用以下代码连接并测试
2008/04/09 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
php对象工厂类完整示例
2018/08/09 PHP
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
python如何实现int函数的方法示例
2018/02/19 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
python制作简单五子棋游戏
2019/06/18 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
python装饰器的特性原理详解
2019/12/25 Python
tensorflow的计算图总结
2020/01/12 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
详解px单位html5响应式方案
2018/03/08 HTML / CSS
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
酒店副总岗位职责
2013/12/24 职场文书
学术会议主持词
2014/03/17 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
应收账款管理制度
2015/08/06 职场文书
python爬虫--selenium模块
2021/03/31 Python
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
MySQL数据管理操作示例讲解
2022/12/24 MySQL