什么是发布订阅模式

文章通过一个小红购买鞋子的例子解释了发布订阅模式的概念。当商品断货时,卖家作为发布者收集买家(如小红、小明)的联系方式,待库存恢复后,通过工具如旺旺通知订阅者。这种模式简化了买家的监控成本,实现了自动通知。
摘要由CSDN通过智能技术生成

你去买东西,但是你要买的东西断货了,老板让你留下你的联系方式,到货之后给你打电话,这就是发布订阅模式。我是这么理解的

     比如小红最近在小红书上种草了一双鞋子,但是呢 联系到卖家后,才发现这双鞋卖光了,但是小红对这双鞋又非常喜欢,所以呢联系卖家,问卖家什么时候有货,卖家告诉她,要等一个星期后才有货,卖家告诉小红,要是你喜欢的话,你可以收藏我们的店铺,等有货的时候再通知你,所以小红收藏了此店铺,但与此同时,小明,小花等也喜欢这双鞋,也收藏了该店铺;等来货的时候就依次会通知他们; 在上面的故事中,可以看出是一个典型的发布订阅模式,卖家是属于发布者,小红,小明等属于订阅者,订阅该店铺,卖家作为发布者,当鞋子到了的时候,会依次通知小明,小红等,依次使用旺旺等工具给他们发布消息;
     
    1.支持简单的广播通信,当对象状态发生改变时,会自动通知已经订阅过的对象。
    
    2.比如上面的列子,小明,小红不需要天天逛淘宝网看鞋子到了没有,在合适的时间点,发布者(卖家)来货了的时候,会通知该订阅者(小红,小明等人)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
发布订阅模式是一种常用的设计模式,它允许我们定义对象间的一种一对多的依赖关系,当对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。发布订阅模式的核心在于发布者和订阅者之间的解耦,发布者不需要知道订阅者的存在,订阅者也不需要知道发布者的存在,它们只需要知道消息的名称或者类型即可。 以下是发布订阅模式的核心实现代码: ``` class EventEmitter { constructor() { this.events = {}; } on(eventName, listener) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(listener); } emit(eventName, ...args) { if (this.events[eventName]) { this.events[eventName].forEach(listener => listener.apply(null, args)); } } off(eventName, listener) { if (this.events[eventName]) { this.events[eventName] = this.events[eventName].filter(l => l !== listener); } } once(eventName, listener) { const onceListener = (...args) => { this.off(eventName, onceListener); listener.apply(null, args); }; this.on(eventName, onceListener); } } ``` 以上代码实现了一个简单的EventEmitter类,它包含了四个方法:on、emit、off和once。其中,on方法用于订阅事件,emit方法用于发布事件,off方法用于取消订阅事件,once方法用于订阅一次性事件。 使用示例: ``` const eventEmitter = new EventEmitter(); // 订阅事件 eventEmitter.on('click', e => console.log(`clicked: ${e}`)); eventEmitter.on('hover', e => console.log(`hovered: ${e}`)); // 发布事件 eventEmitter.emit('click', 'button'); eventEmitter.emit('hover', 'link'); // 取消订阅事件 const clickHandler = e => console.log(`clicked: ${e}`); eventEmitter.on('click', clickHandler); eventEmitter.off('click', clickHandler); // 订阅一次性事件 eventEmitter.once('load', () => console.log('loaded')); eventEmitter.emit('load'); eventEmitter.emit('load'); // 不会触发事件 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值