https://segmentfault.com/a/1190000044480270#item-4
简单说,事件总线是一种发布/订阅模式的实现,允许事件的发布者和订阅者之间进行松耦合的通信。在Guava的事件总线中,事件是任意的Java对象,订阅者是希望根据事件采取行动的对象。
让我们来看看Guava事件总线的一个简单示例。假设你有一个应用,需要在用户完成某项操作时发送通知。我们可以定义一个事件类,比如UserActionEvent,然后创建一个事件总线实例,让感兴趣的组件监听这个事件。
class UserActionEvent(private var action: String){ // 简单的Java类,它携带了事件相关的信息
fun getAction(): String = this.action
}
class EventListener{ // 订阅者
@Subscribe // 通过 @Subscribe 注解标记的方法来响应事件
fun onUserAction(event: UserActionEvent) {
println("User did: ${event.getAction()}")
}
}
fun main() {
val eventbus: EventBus = EventBus()
val eventListener = EventListener()
eventbus.register(eventListener)
// 最后,通过EventBus实例,我们将事件发布出去,并通知所有订阅了这个事件的订阅者。
eventbus.post(UserActionEvent("login"))
}在这个例子中,UserActionEvent是一个简单的Java类,它携带了事件相关的信息。EventListener是一个订阅者,它通过@Subscribe注解标记的方法来响应事件。最后,通过EventBus实例,我们将事件发布出去,并通知所有订阅了这个事件的订阅者。