在java项目中,如果不是swing,当要用到事件、通知机制的时,时下最流利的、最简单的方式就是使用
google的guava-EventBus,它简洁、强大、使用方便,最大多数开源爱好者的首选。
使用EventBus的好处有:
【事件|在java项目中使用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间的通信。传统项目似乎还是大不好,还是通过回调接口,或观察者模式来实现。因为更直观、更好跟踪和定位问题。
推荐阅读
- EventBus 3.0 从入门到精通——使用详解(二)
- 第三方库探究|What(EventBus的核心竟然只是这两个Map?)
- EventBus使用及优点
- Android应用层|Android事件总线(一)EventBus3.0用法全解析
- 源码解析|Android EventBus3源码解析(下)
- EventBus 3.0 从入门到精通——EventBus的应用场景
- Java|EventBus使用
- EventBus|EventBus3.0——索引的使用
- EventBus的基本使用