美文网首页
我和小芳的故事-发布订阅模式

我和小芳的故事-发布订阅模式

作者: 原型设计 | 来源:发表于2019-11-01 15:43 被阅读0次
/**
 * 发布订阅者模式。
 *
 *  故事: 我和小芳去买房。
 * 
 * @class Publish
 */


 //  ================================  我和小芳同时订阅这家房地产      ===================================

class Publish {
  constructor(){
    this.home = [];
  }

  // 订阅
  listen(fn){
    this.home.push(fn);
  }

  // 发布
  trigger(){
    this.home.forEach(element => {
      element.apply(this,arguments);
    });
  } 
}

const ob = new Publish();

// 我订阅
ob.listen(function(...arg){
  console.log('me:',arg);
});

// 小芳订阅
ob.listen(function(...arg){
  console.log('xiaofang:',arg);
});

ob.trigger('尊敬的先生,今天有128平米的房子,你有兴趣嘛!');
ob.trigger('尊敬的小芳,今天有128平米的房子,你有兴趣嘛!');



 //  ================================  我和小芳只想收到自己订阅的消息      ===================================

class Publish {
    constructor(){
      this.home = [];
    }
  
    // 订阅
    listen(key,fn){
      if(!this.home[key]){
        this.home[key] = [];
      }

      this.home[key].push(fn);
    }
  
    // 发布
    trigger(){
      const key = Array.prototype.shift.call(arguments),fns = this.home[key];
      if(!fns || fns.length  === 0){
        return false;
      }
      fns.forEach(element => {
        element.apply(this,arguments);
      });
    } 

    // 移除
    remove(key,fn){
      const fns = this.home[key];
      if(!fns){
        return false;
      }

      this.home[key] =[];

      fn(this.home[key]);
    }
  }
  
  const ob = new Publish();
  
  // 我订阅
  ob.listen('88',function(...arg){
    console.log('me:',arg);
  });
  
  // 小芳订阅
  ob.listen('99',function(...arg){
    console.log('xiaofang:',arg);
  });
  
  ob.remove('88',function(e){
    console.log(e);
  });

  ob.trigger('88','尊敬的先生,今天有128平米的房子,你有兴趣嘛!');
  ob.trigger('88','尊敬的先生,今天有150平米的房子,你有兴趣嘛!');


  ob.trigger('99','尊敬的小芳,今天有128平米的房子,你有兴趣嘛!');



相关文章

  • 我和小芳的故事-发布订阅模式

  • 设计模式之发布订阅模式(1) 一文搞懂发布订阅模式

    目录 发布/订阅者模式的优点 实现发布/订阅者模式需要考虑的点 何时应使用发布/订阅者模式 发布/订阅者模式与观察...

  • Redis发布订阅

    发布订阅 Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布 者和订阅者不进行直接通信,发布者...

  • 发布订阅模式(观察者模式)

    发布订阅模式(观察者模式) 发布订阅也叫观察者模式 发布 && 订阅 使用

  • JS-简单实现发布订阅模式

    发布订阅模式主要涉及三个对象:发布者、订阅者、主题对象。 发布-订阅模式 定义  发布-订阅模式又称观察者模式,它...

  • 订阅发布模式

    Q:何为发布订阅模式?A:这是一种发布者和订阅者之间由事件驱动产生关系的软件开发模式Q:发布订阅模式哪里可以看到?...

  • 观察者模式

    //观察者模式和订阅发布模式的不同点在于,订阅发布模式 订阅者和发布者是解耦的,他们的关联是通过第三方来的//而观...

  • 发布订阅

    //观察者模式和订阅发布模式的不同点在于,订阅发布模式 订阅者和发布者是解耦的,他们的关联是通过第三方来的//例子:

  • MQTT 5.0 - 发布订阅模式介绍

    MQTT 协议的核心在于发布订阅模式,在本文中,我们将对这一模式进行深入的介绍。 发布订阅模式 发布订阅模式区别于...

  • 观察者模式和发布订阅模式的区别

    观察者模式和发布订阅模式最大的区别就是发布订阅模式有个事件调度中心。 在观察者模式中,观察者需要直接订阅目标事件;...

网友评论

      本文标题:我和小芳的故事-发布订阅模式

      本文链接:https://www.haomeiwen.com/subject/lkzfbctx.html