美文网首页
Guava 中的事件总线

Guava 中的事件总线

作者: hemiao3000 | 来源:发表于2020-04-25 22:07 被阅读0次

本片内容收录在我的在线笔记 java-note-for-free 中。

笔记源文件在 gitee 中。

EventBus 是 Guava 的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus 是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。

使用 EventBus 需要做三方面的工作:

自定义 Event

在最简单的情况下,这一步并不是必须的。因为 Guava 的 EventBus 机制不像其它的库的 EventBus 那样要求必须实现某个接口(或继承某个类)。Guava 的 EventBus 允许任意的类型作为 Event 对象。因此你完全可以使用 String 作为 Event 对象。

public class HelloCommand {

    public HelloCommand() {
    }

}

定义 EventHandler

和定义 Event 一样,Guava 不强求你的自定义类必须实现某个接口(或继承某个类)。

public class HelloCommandHandler {

    @Subscribe
    public void handle(HelloCommand command) {
        System.out.println("触发执行");
    }
}

这里需要注意的有两点:

  1. Guava 不强求定义的 EventHandler 必须实现某个接口。所以,我们要通过 @Subscribe 在 EventHandler 中的众多方法中标识出哪个方法是事件处理方法。

  2. 逻辑上,EventHandler 的事件处理方法的参数应该是它所能处理的 Event 对象。

注册 EventHandler

你需要在一个合适的地方创建一个 EventBus 对象,并在合适的地方通过它注册你的 EventHandler 。

EventBus eventBus = new EventBus("Joker");
eventBus.register(new HelloCommandHandler());

触发事件

eventBus.post(new HelloCommand());

相关文章

  • Guava - EventBus(事件总线)

    Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让...

  • Guava 中的事件总线

    本片内容收录在我的在线笔记 java-note-for-free 中。 笔记源文件在 gitee 中。 Event...

  • 使用Android上的Otto Event Bus库

    Otto是一个提供事件总线实施的开源项目。组件可以发布和订阅事件。 Otto是Google的Guava事件总线库的...

  • Springboot 集成EventBus

    Guava的事件总线EventBus库是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本...

  • Guava 中EventBus事件总线模式

    一.事件总线模式的产生背景以及意义? 二.EventBus 如何使用? 三.EventBus 如何工作? 注册了订...

  • Guava基础

    什么是Guava? ​ Guava是Google开源的一个涵盖了字符串处理、缓存、并发库、事件总线、IO等常用...

  • Google Guava EventBus(事件总线)

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于...

  • RxJava实现事件总线(RxBus)学习笔记

    目录事件总线的介绍利用RxJava实现事件总线(Rxbus)Rxbus的使用 事件总线的介绍 1. 什么是事件总线...

  • Flutter单例模式

    借用Flutter事件总线的例子: 8.3 事件总线 在APP中,我们经常会需要一个广播机制,用以跨页面事件通知,...

  • Vue的事件总线

    事件总线是什么? EventBus 又称为事件总线。在Vue中可以使用 EventBus 来作为沟通桥梁的概念,就...

网友评论

      本文标题:Guava 中的事件总线

      本文链接:https://www.haomeiwen.com/subject/bamlwhtx.html