zoukankan      html  css  js  c++  java
  • 发布与订阅模式

    /*第一阶段*/
    var salesOffices = {}; // 定义售楼处
    salesOffices.clientList = []; // 缓存列表,存放订阅者的回调函数
    salesOffices.listen = function(fn) { // 增加订阅者
    this.clientList.push(fn); // 订阅的消息添加进缓存列表
    };
    salesOffices.trigger = function() { // 发布消息
    for (var i = 0, fn; fn = this.clientList[i++];) {
    fn.apply(this, arguments); // (2) // arguments 是发布消息时带上的参数
    }
    };
    salesOffices.listen(function(price, squareMeter) { // 小明订阅消息
    console.log('价格= ' + price);
    console.log('squareMeter= ' + squareMeter);
    });
    salesOffices.listen(function(price, squareMeter) { // 小红订阅消息
    console.log('价格= ' + price);
    console.log('squareMeter= ' + squareMeter);
    });
    salesOffices.trigger(2000000, 88); // 输出:200 万,88 平方米
    salesOffices.trigger(3000000, 110); // 输出:300 万,110 平方米


    /*第二阶段*/
    var salesOffices = {}; // 定义售楼处
    salesOffices.clientList = {}; // 缓存列表,存放订阅者的回调函数
    salesOffices.listen = function(key, fn) {
    if (!this.clientList[key]) { // 如果还没有订阅过此类消息,给该类消息创建一个缓存列表
    this.clientList[key] = [];
    }
    this.clientList[key].push(fn); // 订阅的消息添加进消息缓存列表
    };
    salesOffices.trigger = function() { // 发布消息
    var key = Array.prototype.shift.call(arguments), // 取出消息类型
    fns = this.clientList[key]; // 取出该消息对应的回调函数集合
    if (!fns || fns.length === 0) { // 如果没有订阅该消息,则返回
    return false;
    }
    for (var i = 0, fn; fn = fns[i++];) {
    fn.apply(this, arguments); // (2) // arguments 是发布消息时附送的参数
    }
    };
    salesOffices.listen('squareMeter88', function(price) { // 小明订阅 88 平方米房子的消息
    console.log('价格= ' + price); // 输出: 2000000
    });
    salesOffices.listen('squareMeter110', function(price) { // 小红订阅 110 平方米房子的消息
    console.log('价格= ' + price); // 输出: 3000000
    });
    salesOffices.trigger('squareMeter88', 2000000); // 发布 88 平方米房子的价格
    salesOffices.trigger('squareMeter110', 3000000); // 发布 110 平方米房子的价格

  • 相关阅读:
    时间序列理论专题之二 时间序列的表达
    Ado.net Entity FrameWork的性能问题
    时间序列专题之三 时间序列的分段线性表示
    Tfs 2010使用小技巧
    时间序列理论专题之一 前言
    绝大多数新技术的学习,都是浪费生命
    Tfs2010简体中文版:翻译永远是问题
    MSsql 查询时默认是不区分大小写。 可以用语句强制sql语句查询时区分大小写 狼
    将.NET dll注册到GAC(Global Assembly Cache)中 狼
    js重载 狼
  • 原文地址:https://www.cnblogs.com/hngdlxy143/p/10392587.html
Copyright © 2011-2022 走看看