一、介绍
Guava事件总线实际上是一个“观察者-监听者”实现,通过使用弱引用的方式将各个模块关联起来,下面这几个帖子将EventBus讲解的非常详细,如不是很了解,请移步:
通过EventBus我们可以解决模块间相互耦合,相互依赖,从而达到低耦合便于维护的目的。
二、案例分析——全文检索
以将任务信息添加到全文检索的应用为例
1. 现在情况
我们现在是通过在任务模块中实现接口IndexEnable,并在需要索引的时候直接调用IndexManager触发索引的过程,故两个模块的依赖方式为:
对于任务模块: 我只关注任务信息的生产(黑盒),对于你是否有全文索引,希望并不要影响我。
对于全文检索: 我才是消费者,当时我通过让你们依赖我(锅全给大家啦),我反而成了规则制定者啦.
2. 理想状态
以将任务信息添加到全文检索的应用为例
为什么要改为这样? 我的观点已经在前面阐述,再此再做说明,全文检索是消费者,任务模块是生产者,任务模块是否有全文检索并不影响其正常使用。
这样我们的架构图变为如下
从此全文检索变为建立在各个业务模块基础之上的一个新模块,那如何让我们的EventBus来实现呢。
三、具体实现
参考前面提供的例子,内部代码不做例子展示, 本示例的业务场景与前面讨论基本是一样的