发布者 - 订阅者与观察者

Jer*_*ian 44 design-patterns publish-subscribe event-dispatching observer-pattern

我试图将Observer设计模式理解为主要事件调度设计模式.观察者模式似乎是发布 - 订阅设计模式的类型或类型,我想知道为什么有两个相似的外观设计模式以及我应该如何在两者之间进行选择.

在这两种情况下,信息消息都在实体之间发送,在这两种情况下,实体必须以某种方式注册或订阅才能接收消息.

两种设计模式之间的主要区别似乎是:

  • 观察者模式似乎具有较低的消息量.观察员向他们观察的实体注册,以获得某一事件的通知.发布 - 订阅模式似乎涉及单向对话,一种从一个实体到另一个实体的独白,具有更多不同类型的消息.
  • 在Observer模式中,Observers期望一种特定类型的事件通知,其中Publish-Subscribe似乎具有更开放的消息协议,具有更广泛的可能消息类型和消息内容(由特定类型的事件触发的消息之间的差异)指示事件发生与更一般的消息协议相对应,消息包含可能不是事件触发器的信息,例如包含由周期性定时器触发的温度数据的消息.
  • Observer在应用程序的边界内或在单个进程内实现.Publish-Subscribe是一种跨应用程序通信模式,消息在不同进程之间交换.
  • 架构的不同之处在于,当Observer使用组合的发布者/代理和订阅者(​​观察者)实体时,Publish-Subscribe具有单独的发布者,代理和订阅者实体.

我想到的一个想法是,在多线程应用程序中,可以在多个线程之间进行通信而不是Observer模式时使用Publish-Subscribe模式.也许Obse​​rver模式可以在进程之间使用,例如进程注册与另一个进程注册,以便在事件发生时得到通知.一个示例是农场管理仪表板应用程序,其注册多个动物饲料箱,如果由箱测量的饲料水平或重量下降到某个阈值以下则通知.

这两种设计模式之间是否存在其他重要差异,这些设计模式可以为选择一种模式提供标准?