zoukankan      html  css  js  c++  java
  • 发布订阅模式源码实现

    var shoeObj = {}; // 定义发布者
    shoeObj.list = []; // 缓存列表 存放订阅者回调函数
            
    // 增加订阅者
    shoeObj.listen = function(key,fn) {
        if(!this.list[key]) {
            // 如果还没有订阅过此类消息,给该类消息创建一个缓存列表
            this.list[key] = []; 
        }
        this.list[key].push(fn);  // 订阅消息添加到缓存列表
    }
    
    // 发布消息
    shoeObj.trigger = function(){
        var key = Array.prototype.shift.call(arguments); // 取出消息类型名称
        var fns = this.list[key];  // 取出该消息对应的回调函数的集合
    
        // 如果没有订阅过该消息的话,则返回
        if(!fns || fns.length === 0) {
            return;
        }
        for(var i = 0,fn; fn = fns[i++]; ) {
            fn.apply(this,arguments); // arguments 是发布消息时附送的参数
        }
    };
    
    // 小红订阅如下消息
    shoeObj.listen('red',function(size){
        console.log("尺码是:"+size);  
    });
    
    // 小花订阅如下消息
    shoeObj.listen('block',function(size){
        console.log("再次打印尺码是:"+size); 
    });
    shoeObj.trigger("red",40);
    shoeObj.trigger("block",42);
  • 相关阅读:
    个人总结11
    进度条4,5
    对vivo自带输入法的评价
    个人总结10
    hdu5589Tree
    HDU5213 Lucky
    2018icpcShenYangE
    bzoj3683: Falsita
    cf396C. On Changing Tree
    cf600E. Lomsat gelral
  • 原文地址:https://www.cnblogs.com/afterwawa/p/8893229.html
Copyright © 2011-2022 走看看