Eventbus 更像是调解者还是观察者?据谷歌称,“eventbus mediator”获得 2.430 次点击,“eventbus observer”获得 3.850 次点击。
从描述来看,它们都符合我想要做的事情(调解员甚至更多)。那么 eventbus 是否实现了特定的模式,还是由我说它是由我决定的?
Eventbus 更像是调解者还是观察者?据谷歌称,“eventbus mediator”获得 2.430 次点击,“eventbus observer”获得 3.850 次点击。
从描述来看,它们都符合我想要做的事情(调解员甚至更多)。那么 eventbus 是否实现了特定的模式,还是由我说它是由我决定的?
通常,给定的一段代码本质上并不是一种或另一种模式的示例。这就是为什么它们被称为“模式”(而不是说,“实现技术”)。很多软件有点像一种模式,但也类似于另一种模式——这很好。最好不要为了模式而坚持模式,而是将它们用作讨论架构的共享词汇。
EventBus 就是这样一种工具。我在编写它时考虑了类似观察者的情况,但是如果您适当地构建应用程序,它可以扮演类似调解者的角色。
EventBus 的一般用途是触发事件。使用观察者这个词更适合这一点。观察者模式使用事件或消息来通知感兴趣的对象关于正在观察(更改)的对象的更改。Mediator 还尝试将这两个实现解耦,但在某种意义上比 Observer 更具体,它可以了解两个对象/接口的所有信息,并作为粘合剂使这两个实现工作。Observer 并没有声称知道内部结构甚至接口。它所知道或关心的只是事件发生时,它需要通知感兴趣的对象。
Mediator 可以是特定于场景的设置,而 Observer 可以更通用。
EventBus 在应用程序范围内几乎总是一个单例,我肯定会将 EventBus 归类为使用 Observer,因为它在大多数情况下的真正意图是促进运行时内各种模块/对象之间的全局消息传递。
wikipedia:中介者模式的本质是“定义一个封装了一组对象如何交互的对象”
EventBus 不这样做。
EventBus 也不是观察者模式,因为如果您有 N 个对象并且想要在所有对象之间进行通信,那么如果您使用观察者模式,则需要 N*N 个观察者,但只有一个全局 EventBus 就足以完成相同的工作。
所以 EventBus 是 EventBus 模式。
我想说一个典型的事件总线利用这两种模式:
由于前言说“一个 [...] 发布/订阅 API”,我会选择 Observer。