欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在java项目中使用EventBus的优缺点

程序员文章站 2022-06-13 15:01:22
...

       在java项目中,如果不是swing,当要用到事件、通知机制的时,时下最流利的、最简单的方式就是使用

google的guava-EventBus,它简洁、强大、使用方便,最大多数开源爱好者的首选。

       使用EventBus的好处有:

      1.EventBus简洁、强大

      2.不用写回调接口

      3.可以组件、线程间的相互通信

 

       但是,它也有缺点。比如,事件的处理(侦听)是通过方法的参数类型来确定的。当在项目中,当大量使用EventBus时,跟踪和定位问题,是一件很痛苦的事。我们知道,事件的三要素有:事件源、事件状态、事件处理者。即当某个事件源的某个状态发生变化时,事件的处理者侦听到了,会做出相应的处理。而EventBus的注册事件,仅通过EventBus.register()来注册。当一个事件有N个侦听者时,EventBus.register()会分布在项目的N个角落,而且当有N种事件时,这种情况就变得更加恐怖了。当定位问题,无法确定一个事件会有多少个侦听者,因为,你无法知道项目中有多少个register(),并且有多少个方法的参数与post()的参数的类型一致。

       相比之下,javascript和actionscript的事件处理,就友好得多了。如: btn.addEventListener(MouseEvent.CLICK,onClickHandler);这一行代码,就能表达事件的三要素。事件源是btn,事件状态是click,事件的处理者是onClickHandler函数。非常好定位问题。即使通过javascript和actionscript来实现google的EventBus这种全局事件,也可以通过事件状态来快速定位,事件侦听者是谁、有几个事件侦听者。

      个人感觉,google的EventBus更适合用在android项目中,特别是在Activity间的通信。传统项目似乎还是大不好,还是通过回调接口,或观察者模式来实现。因为更直观、更好跟踪和定位问题。