我试图理解观察者设计模式 https://en.wikipedia.org/wiki/Observer_pattern作为主要事件调度的设计模式。观察者模式似乎是一种类型或种类发布订阅设计模式 https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern我想知道为什么有两种看起来相似的设计模式以及我应该如何在两者之间进行选择。
在这两种情况下,信息消息都是在实体之间发送的,并且在这两种情况下,实体必须以某种方式注册或订阅才能接收消息。
两种设计模式之间的主要区别似乎是:
- 观察者模式的消息量似乎较少。观察者向他们正在观察的实体注册,以获得特定事件的通知。发布-订阅模式似乎涉及一种单向对话,一种从一个实体到另一个实体的独白,包含大量不同类型的消息。
- 在观察者模式中,观察者期望特定类型的事件通知,而发布-订阅似乎具有更开放的消息协议,具有更广泛的可能消息类型和消息内容(由特定类型的事件触发的消息之间的差异)与更通用的消息协议相比,该协议的消息包含可能不是事件触发器的信息,例如包含由周期性计时器触发的温度数据的消息)。
- 观察者是在应用程序的边界内或在单个进程内实现的。发布-订阅是一种跨应用程序通信模式,在不同进程之间交换消息。
- 架构上的差异在于发布-订阅具有单独的发布者、代理和订阅者实体,而观察者则使用组合的发布者/代理和订阅者(观察者)实体。
我想到的一个想法是,在多线程应用程序中,在多个线程之间进行通信时可以使用发布-订阅模式,而不是观察者模式。也许观察者模式可以在进程之间使用,例如一个进程向另一个进程注册,以便在事件发生时收到通知。一个例子是农场管理仪表板应用程序,该应用程序注册多个动物饲料箱,以便在饲料箱测量的饲料水平或重量低于某个阈值时收到通知。
这两种设计模式之间是否还存在其他重要差异,可以为选择其中一种提供标准?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)