码迷,mamicode.com
首页 > 编程语言 > 详细

javascript的简易发布/订阅模式

时间:2015-11-20 15:35:42      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

发布/订阅(pub/sub)是一种消息模式,它的两个参与者:发布者和订阅者。发布者向某个信道发布一条消息,订阅者绑定这个信道,当有消息发布到信道里面的时候,订阅者回接受到这个通知。发布者和订阅者是完全解耦的,彼此仅仅共享一个通道名称。

这种模式提高了应用的可维护性,让应用易于扩展。

简单的设计思路:设计信道记录发布的信息,然后在订阅者中执行成功回调函数(从信道中监听事件)。

var PubSub = {
    subscribe: function(key, callback) {

      //this._callbacks = this._callbacks || {};
      //this._callbacks[key] = this._callbacks[key] || [];
      //this._callbacks[key].push(callback);

     this._callbacks || (this.callbacks = {});
        (this._callbacks[key] || (this._callbacks[key] = [])).push(callback);
        return this;
    },
    publish: function() {
        var arg = Array.prototype.slice.call(arguments, 0);//参数转数组
        var key = args.shift();//找key
        var list, calls, i, l;
     //没有_callbacks直接返回,没有_callbacks[key]直接返回

      //if(this._callbacks && this._callbacks[key]){
      //  list = this._callbacks[key]
      //  calls = this._callbacks;
      //}else{
      //  return this;
      //}

     if (!(calls = this._callbacks)) return this;
        if (!(list = this._callbacks[key])) return this;
     //执行回调
for (i = 0; l = list.length; i < l; i++) { list[i].apply(this, args); } return this; } }; // 使用方法 PubSub.subscribe("leju", function() { alert("leju"); }); PubSub.publish("leju");

上面的原生js实现的,下面的时jquery实现。

$(function(){
        var obj = $({});
        $.subscribe = function(){
            obj.bind.apply(obj, arguments);
        }
        $.unsubscribe = function(){
            obj.unbind.apply(obj, arguments);
        }
        $.publish = function(){
            obj.trigger.apply(obj, arguments);
        }
    //调用方法 $.subscribe(
"leju", function( event, a) {
        console.log( event.type, a); }); $.publish(
"leju", "leju"); })

 

javascript的简易发布/订阅模式

标签:

原文地址:http://www.cnblogs.com/otss/p/4980818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!