16

Eventbus 更像是调解者还是观察者?据谷歌称,“eventbus mediator”获得 2.430 次点击,“eventbus observer”获得 3.850 次点击。

从描述来看,它们都符合我想要做的事情(调解员甚至更多)。那么 eventbus 是否实现了特定的模式,还是由我说它是由我决定的?

4

5 回答 5

18

通常,给定的一段代码本质上并不是一种或另一种模式的示例。这就是为什么它们被称为“模式”(而不是说,“实现技术”)。很多软件有点像一种模式,但也类似于另一种模式——这很好。最好不要为了模式而坚持模式,而是将它们用作讨论架构的共享词汇。

EventBus 就是这样一种工具。我在编写它时考虑了类似观察者的情况,但是如果您适当地构建应用程序,它可以扮演类似调解者的角色。

于 2012-02-14T04:22:26.643 回答
12

EventBus 的一般用途是触发事件。使用观察者这个词更适合这一点。观察者模式使用事件或消息来通知感兴趣的对象关于正在观察(更改)的对象的更改。Mediator 还尝试将这两个实现解耦,但在某种意义上比 Observer 更具体,它可以了解两个对象/接口的所有信息,并作为粘合剂使这两个实现工作。Observer 并没有声称知道内部结构甚至接口。它所知道或关心的只是事件发生时,它需要通知感兴趣的对象。

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

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

于 2012-06-23T05:59:42.680 回答
6

wikipedia:中介者模式的本质是“定义一个封装了一组对象如何交互的对象”

EventBus 不这样做。

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

所以 EventBus 是 EventBus 模式。

于 2014-07-23T15:59:54.390 回答
6

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

  • 事件总线本质上封装了其他对象如何通信,所以它一个中介
  • 注册为事件处理程序/侦听器的对象是观察者(他们观察的对象是事件类型和/或产生这些事件的对象,不是总线本身),因此正如维基百科所说,观察者模式主要用于实现分布式事件处理系统(强调我的),但事件总线本身并不是观察者。
于 2017-05-24T11:04:48.860 回答
0

由于前言说“一个 [...] 发布/订阅 API”,我会选择 Observer。

于 2011-05-12T08:10:03.277 回答