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实例,我们将事件发布出去,并通知所有订阅了这个事件的订阅者。