【设计模式】发布订阅模式和观察者模式实现和区别

我总感觉这两个是一个东西,老是傻傻分不清楚,在写 vue 项目中的时候我们常用的还是发布订阅模式,比如使用事件总线 eventBus 就是发布订阅模式

发布-订阅模式(Pub-Sub Pattern)和观察者模式(Observer Pattern)是两种常见的软件设计模式,它们都涉及到对象间的通信和事件处理,但在实现方式和应用场景上有一些区别:

  1. 观察者模式

    • 在观察者模式中,有一个主题(Subject)和多个观察者(Observer)。主题维护着一个观察者列表,并提供方法用于注册和注销观察者,当主题状态发生变化时,它会通知所有的观察者。
    • 观察者模式通常是一对多的关系,一个主题可以有多个观察者,当主题状态改变时,所有观察者都会收到通知,并且采取相应的行动【调用观察者的update 方法】。
    • 直接的、点对点的通信,主题与观察者之间有直接的关联。
    • 手写一个观察者模式
  2. 发布-订阅模式

    • 在发布-订阅模式中,有一个发布者【emit】(Publisher)和多个订阅者【on】(Subscriber)。发布者和订阅者之间没有直接的联系,而是通过一个事件通道(Event Channel)进行通信。
    • 发布者将事件发布到事件通道中,订阅者可以通过订阅感兴趣的事件来接收通知。订阅者可以订阅多个不同的事件,并且可以随时取消订阅。
    • 手写一个发布订阅
相关推荐
Swift社区25 分钟前
AI 时代,ArkUI 的设计模式会改变吗?
人工智能·设计模式
数据中穿行26 分钟前
访问者设计模式全方位深度解析
设计模式
宁雨桥1 小时前
前端设计模式面试题大全
前端·设计模式
数据中穿行2 小时前
迭代器设计模式全方位深度解析
设计模式
数据中穿行2 小时前
观察者设计模式全方位深度解析
设计模式
程序员Terry3 小时前
别老写重复代码了!模版方法模式一次讲透
java·设计模式
数据中穿行3 小时前
建造者模式全方位深度解析
设计模式
数据中穿行3 小时前
组合设计模式全方位深度解析
设计模式
数据中穿行3 小时前
原型设计模式全方位深度解析
设计模式
CRMEB4 小时前
电商项目中订单流程可以使用哪些设计模式?如何开发?
java·设计模式·gitee·开源·php·crmeb