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 相关文章推荐
破除网页鼠标右键被禁用的绝招大全
Dec 27 Javascript
JavaScript中为元素加上name属性的方法
May 09 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
JS运动框架之分享侧边栏动画实例
Mar 03 Javascript
提高jQuery性能优化的技巧
Aug 03 Javascript
javascript如何操作HTML下拉列表标签
Aug 20 Javascript
Bootstrap每天必学之导航条(二)
Mar 01 Javascript
Javascript设计模式之观察者模式(推荐)
Mar 29 Javascript
vue双向绑定简要分析
Mar 23 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 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
匹配任意字符的正则表达式写法
2010/04/29 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
python3中函数参数的四种简单用法
2018/07/09 Python
python如何删除文件中重复的字段
2019/07/16 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
基于python使用tibco ems代码实例
2019/12/20 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
金属材料工程个人求职的自我评价
2013/12/04 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
环境建设实施方案
2014/03/14 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
沈阳故宫导游词
2015/01/31 职场文书
教你用python实现12306余票查询
2021/06/30 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python