Eventbus是中介还是观察者模式?

时间:2011-05-12 08:03:18

标签: design-patterns observer-pattern event-bus mediator

Eventbus更像是调解员还是观察者?根据谷歌的说法, “eventbus mediator”获得2.430点击率 “eventbus观察者”获得3.850次点击。

根据描述,他们都会匹配我想做的事情(调解员甚至更多)。 那么eventbus实现了一个特定的模式,还是我自己说的呢?

5 个答案:

答案 0 :(得分:13)

通常,给定的代码片段本质上不是一种模式或另一种模式的示例。这就是为什么它们被称为“模式”(而不是“实施技术”)。很多软件看起来像一个模式,但也类似于另一个 - 这很好。最好不要为了模式而遵守模式,而是将它们用作讨论体系结构的共享词汇。

EventBus就是这样一个工具。我在考虑类似Observer的情况下编写它,但是如果你适当地构建你的应用程序,它可以扮演类似Mediator的角色。

答案 1 :(得分:11)

EventBus的一般用法是触发事件。使用Observer这个词更适合。观察者模式使用事件或消息来通知关于被观察(改变)的对象的感兴趣对象的变化。 Mediator也试图解耦这两个实现,但在某种意义上它比Observer更具体,它可以知道所有关于这两个对象/接口的东西,并且可以作为粘合剂使这两个实现工作。 观察者并不声称知道内部甚至界面。所有它知道或关心的是当事件发生时,它需要通知感兴趣的对象。

Mediator可以是特定于场景的设置,而Observer可能更通用。

EventBus几乎总是在应用程序范围内的单例,我肯定会将EventBus归类为使用Observer,因为它在大多数情况下的真实意图是在运行时的各种模块/对象之间进行全局消息传递。

答案 2 :(得分:4)

维基百科:介体模式的本质是“定义一个封装一组对象如何交互的对象”

EventBus不会这样做。

EventBus也不是观察者模式,因为如果您有N个对象并且想要在所有对象之间进行通信,那么如果您使用观察者模式但是只有一个全局EventBus足以执行相同的工作,则需要N * N个观察者。 / p>

所以EventBus是EventBus模式。

答案 3 :(得分:3)

我说一个典型的事件总线使用这两种模式:

  • 事件总线基本上封装了其他对象的通信方式,因此 是一个中介
  • 注册为事件处理程序/侦听器的对象是观察者(并且他们观察的主题是事件类型和/或产生这些事件的对象,总线本身),因此{{3 } observer模式" 主要用于实现分布式事件处理系统" (强调我的,但事件总线本身就是观察者。

答案 4 :(得分:0)

由于前言是“a [...]发布/订阅API”,我会选择观察者。