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 的Document属性和方法集合
Jan 25 Javascript
jquery 操作iframe的几种方法总结
Dec 13 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
canvas时钟效果
Feb 16 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
Mar 28 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
Vue页面骨架屏的实现方法
May 22 Javascript
JS立即执行的匿名函数用法分析
Nov 04 Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 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
实用函数5
2007/11/08 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
详解supervisor使用教程
2017/11/21 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
函授自我鉴定
2013/11/06 职场文书
师范应届生求职信
2013/11/15 职场文书
医院护士的求职信
2014/01/03 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
经济管理专业求职信
2014/06/09 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
MySQL数据库 任意ip连接方法
2022/05/20 MySQL