在一个应用程序中,其各个模块之间经常要进行通信。而为了减少各个模块间的耦合度,常用的做法就是使用回调函数。而在java语言中,因为因为没有回调函数的概念,通常的做法就是采用观察者设计模式来实现回调。
观察着模式算是比较“完美”了,但是有没有更好的方法呢?
有个名人说过(我自己)——代码一定要优雅。
于是我发现了eventbus这个东西。
eventbus可以翻译为消息总线,它可以认为是消息订阅/发布的一种实现,它简洁而优雅的让消息的发送者和接收者实现了完全的解耦。
使用eventbus只需要四步。
第一步:
在项目中添加maven依赖
<dependency>
<groupId>org.greenrobot</groupId>
<artifactId>eventbus</artifactId>
<version>3.0.0</version>
</dependency>
或者去官方网站下载eventbus的jar,大小只有50K左右。并将jar放到项目的依赖库中
eventbus的github地址:https://github.com/greenrobot/EventBus
第二步:
定义一个Event类,就是pojo类
public class AEvent{
}
第三步:
在任何需要接收消息的地方,进行注册,并定义接收消息的方法;同时不需要接收消息时,要记得解除注册。
注册:
EventBus.getDefault().register(this);
解除注册:
EventBus.getDefault().unregister(this);
设定接收消息的类型:
@Subscribe
public void onEvent(AEvent event) {/* Do something */};
第四步:
在任何需要的地方发送消息
EventBus.getDefault().post(new AEvent());
PS :本文中介绍的eventbus位于org.greenrobot下,此eventbus主要是针对android使用的,当然在非安卓环境下也可正常使用。在google的guava.jar中也可找到eventbus的实现,有兴趣的可以研究研究那个,那是一个略微复杂的eventbus。