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代码
Apr 23 Javascript
js wmp操作代码小结(音乐连播功能)
Nov 08 Javascript
javascript 导出数据到Excel(处理table中的元素)
Dec 18 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
jquery JSON的解析方式示例介绍
Jul 27 Javascript
ECMAScript6中Map/WeakMap详解
Jun 12 Javascript
javascript每日必学之循环
Feb 19 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 Javascript
AngularJS service之select下拉菜单效果
Jul 28 Javascript
深入研究React中setState源码
Nov 17 Javascript
jQuery实现动态控制页面元素的方法分析
Dec 20 jQuery
JavaScript 严格模式(use strict)用法实例分析
Mar 04 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
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
python实现超级玛丽游戏
2020/03/18 Python
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
《蓝色的树叶》教学反思
2014/02/24 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
社区节水倡议书
2015/04/29 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
放牛班的春天观后感
2015/06/01 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
感恩教师节主题班会
2015/08/12 职场文书
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记