发布者 - 订阅者与观察者

时间:2012-08-08 03:35:59

标签: design-patterns observer-pattern publish-subscribe event-dispatching

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

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

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

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

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

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

0 个答案:

没有答案