广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Guava中EventBus的使用
  • 243
分享到

详解Guava中EventBus的使用

GuavaEventBus使用GuavaEventBus 2022-12-23 12:12:30 243人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录Guava EventBus使用场景示例核心总结Guava EventBus EventBus是Guava的事件处理机制,是设计模式中观察者模式(生产/消费者编程模型)的优雅实现

Guava EventBus

EventBus是Guava的事件处理机制,是设计模式中观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus使用非常简单便捷。

如果你做过CS的开发,下面这段代码可能会比较熟悉。

Button button = new Button("确定");

button.addListener( new Listener(){
    ...
    public void onClick(Event event){
        // 
    }
    ...
} );

为按钮注册事件监听,当按钮被点击时,则触发监听中相应的回调。在上面的代码中,有三个角色事件(Event),事件源(Button),监听(Listener),按钮作为事件源,当点击行为触发时,会将该行为封装成对应的点击事件,并根据行为类型将事件传递到响应的监听器上, 这也就是我们常说的监听器模式。

使用场景

实现消息生产者与消费者间的解耦,对应事件源与监听器,而消息则是事件

通过事件驱动业务流程扭转,通过异步执行机制实现代码非阻塞执行

扩展主线外的分支业务,减少代码的侵入,比如各个环节的消息通知、短信提醒等

实现消息广播到不同的模块中

示例

订单支付时的消息发送

// 商品
public class ProductOrder {
    private String user; // 用户
    private String product; // 商品
    private double amount; // 金额
    @Override
    public String toString() {
        return String.fORMat("用户:%s购买了商品:%s,总金额:%s", user, product, amount);
    }
}
// 事件
    @Data
    @AllArgsConstructor
    public static class CreateOrderEvent implements OrderEvent{
        private ProductOrder order;
    }
// 监听
    public static class CreateOrderListener{
        @Subscribe
        public void onEvent(CreateOrderEvent event) {
            log.info("创建订单:{}", event.getOrder());
        }
    }

测试: 我们可以定义各种事件,比如订单创建、订单取消、订单支付... 只需要简单的三个步骤即可:

// 1. 创建事件总线
    EventBus eventBus = new EventBus( ProductOrder.class.getName() );
// 2. 注册事件监听
    eventBus.reGISter( new CreateOrderListener() );
    eventBus.register( new PayOrderListener() );
    eventBus.register( new CancelOrderListener() );
    eventBus.register( new ReneWorderListener() );
// 3. 发送事件通知
    eventBus.post(new ProductOrder.CreateOrderEvent(order));
    TimeUnit.SECONDS.sleep(1);
    eventBus.post(new ProductOrder.CancelOrderEvent(order));
    TimeUnit.SECONDS.sleep(1);
    eventBus.post(new ProductOrder.RenewOrderEvent(order));
    TimeUnit.SECONDS.sleep(1);
    eventBus.post(new ProductOrder.PayOrderEvent(order));
    TimeUnit.SECONDS.sleep(5);
    eventBus.post(new ProductOrder.ReturnOrderEvent(order));

同时我们可以通过AsyncEventBus建立事件异步总线,这样在事件被触发时,可以异步通知监听者完成事件回调,以此来提高响应速度。

核心

EventBus

事件总线,可以理解为事件与监听器的上下文,主要实现事件的注册、事件的分发、以及监听器的回调,主要提供的方法包括:

  • register 注册监听,将监听器注册到事件总线,通过注解@Subscribe通知其监听的事件类型(第一个方法参数类型)
  • unregister 卸载监听,从事件总线移除监听
  • post 发送事件通知,根据post事件类型,找到所有订阅了该类型事件的监听器,并将事件推送到监听器对应的监听方法

Subscribe

通过@Subscribe标识监听器所关注的事件类型

Event

可以是任何对象,当然不建议将基础类型或String作为事件类型,这样就没法做到按类型区分了

通过上面的图就可以很清楚各个各个组件的职责,以及如何通过事件总线完成事件向监听的传播,最终基于事件回调机制完成消息传递。基于事件驱动的服务模型

上面这种结构的图形是不是在很多位置都见过,这是一种经典的设计模式。试想一下,我们不通过事件驱动行为时,一般你们怎么写代码,通过ifelse?或者其他有着异曲同工的 实现方法,目的最后都是一样。基于Guava提供的工具,我们不仅在使用时只需要简单的三个步骤就能实现,同样,当需要屏蔽该功能时只需要去掉register一行即可,对整体功能 也没有任何的影响。

在我们引入某种设计模式,某种架构模型时,总的目的都是为了降低代码模块间的耦合度,提升代码整体的可读性,最终让代码能够易于维护性,或者有一定的复用性。

总结

事件监听模式、观察者模式、发布订阅模式,都是非常的相似,通过建立事件与监听器、观察者与被观察者、生产者与消费者者间消息传递媒介(示例中的事件总线EventBus),

不仅能够使消息的发起者与接收者之间进行解耦,最主要的是通过消息传递渠道实现消息异步传播,提升系统效率

到此这篇关于详解Guava中EventBus的使用的文章就介绍到这了,更多相关Guava EventBus内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Guava中EventBus的使用

本文链接: https://www.lsjlt.com/news/175637.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Guava中EventBus的使用
    目录Guava EventBus使用场景示例核心总结Guava EventBus EventBus是Guava的事件处理机制,是设计模式中观察者模式(生产/消费者编程模型)的优雅实现...
    99+
    2022-12-23
    Guava EventBus使用 Guava EventBus
  • Vue中事件总线(eventBus)的深入详解及使用
    目录1. 简介2. 使用安装及引入在组件中使用补充:移除监听事件总结1. 简介 Vue 组件中常见的有:父子组件通信、兄弟组件通信。而父子组件通信就很简单,父组件会通过 props ...
    99+
    2022-11-13
  • Java guava monitor监视器线程的使用详解
    Maven依赖 <dependency> <groupId>com.google.guava</groupI...
    99+
    2022-11-12
  • Android 消息分发使用EventBus的实例详解
    Android 消息分发使用EventBus的实例详解1. AndroidStudio使用dependencies { //最新版本 compile 'org.greenrobot:eventbus:3.0.0' //可以翻倍提高E...
    99+
    2023-05-30
    android eventbus roi
  • 关于Guava缓存详解及使用说明
    目录缓存Guava cache详细配置缓存的并发级别缓存的初始容量设置设置最大存储缓存清除策略显式清除Cache LoadingCache缓存 缓存分为本地缓存与分布式缓存...
    99+
    2022-11-13
    Guava缓存 Guava缓存使用 Guava缓存说明
  • Flutter EventBus事件总线的应用详解
    目录前言EventBus的简介EventBus的实际应用总结前言 flutter项目中,有许多可以实现跨组件通讯的方案,其中包括InheritedWidget,Notificatio...
    99+
    2022-11-13
  • vue篇之事件总线EventBus使用示例详解
    目录正文父子组件通讯原则EventBus的简介如何使用EventBus初始化发送事件接收事件移除事件监听者全局EventBus创建全局EventBus总结正文 许多现代JavaScr...
    99+
    2022-11-13
  • Vue中的eventBus怎么使用
    本篇内容主要讲解“Vue中的eventBus怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中的eventBus怎么使用”吧!1. 简介Vue 组件中常见的有:父子组件通信、兄弟组件...
    99+
    2023-06-29
  • Java两大工具库Commons和Guava使用示例详解
    目录正文先定义观察者然后定义账户类最后实现事件总线创建观察者接口和具体观察者创建Subject:正文 除了操作集合、限流和缓存,Guava还有另一个隐秘的功能:事件总线EventB...
    99+
    2023-02-07
    Java工具库Commons Guava Java工具库
  • 使用TypeScript实现一个类型安全的EventBus示例详解
    目录前言准备工作目标思路具体实现全部代码后记前言 随着vue3的发布,TypeScript在国内越来越流行,学习TypeScript也随即变成了大势所趋。本文就通过实现一个类型安全的...
    99+
    2022-11-13
  • Flutter事件监听与EventBus事件的应用详解
    目录一 指针事件 Pointer二 手势识别三 跨组件事件的传递在Flutter中,手势有两个不同的层次: 第一层:原始指针事件(Pointer Events) 第二层:手势识别(G...
    99+
    2023-05-15
    Flutter事件监听 Flutter EventBus
  • Guava Cache的使用简介
    目录1 引入 2 Guava Cache介绍 3 缓存的过期时间设置 4 缓存加载机制 5 缓存清理 1 引入 说到缓存,可能大家最先想到的还是Redis。作为基于键值对的非关系型...
    99+
    2022-11-12
  • vue的keep-alive中如何使用EventBus
    这篇文章主要介绍了vue的keep-alive中如何使用EventBus,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.keep-aliv...
    99+
    2022-10-19
  • Guava中ListenableFuture与RateLimiter如何使用
    Guava中ListenableFuture与RateLimiter如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。概念ListenableFuture顾名思义就是可...
    99+
    2023-06-17
  • vue中的总线机制(EventBus)解析
    目录一、EventBus的简介二、使用方法第一步:2种方式初始化第二步:发送事件第三步:接受事件第四步:移除事件三、全局EventBus1、注册,在main.js中2、在组件中使用&...
    99+
    2022-11-13
    vue总线机制 vue中EventBus vue总线机制EventBus
  • SAP UI5和Kyma中的EventBus如何理解
    SAP UI5和Kyma中的EventBus如何理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SAP UI5EventBus是一个小型的subscribe/publis...
    99+
    2023-06-04
  • EventBus 3.0.0如何在Android 应用中使用
    本篇文章给大家分享的是有关EventBus 3.0.0如何在Android 应用中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。EventBus框架EventBus是一个通...
    99+
    2023-05-31
    android eventbus3.0 roi
  • Java Guava的使用技巧有哪些
    本文小编为大家详细介绍“Java Guava的使用技巧有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java Guava的使用技巧有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。G...
    99+
    2023-07-05
  • Android 中 EventBus 的使用之多线程事件处理
    在这一系列教程的最后一篇中,我想谈谈GR的EventBus,在处理多线程异步任务时是多么简单而有效。 AsyncTask, Loader和Executor…… 拜托! And...
    99+
    2022-06-06
    事件 eventbus 多线程 线程 Android
  • Java开发利器之Guava Cache的使用教程
    目录前言缓存的意义Guava Cache特色API介绍Builder配置简单示例本地缓存前言 缓存技术被认为是减轻服务器负载、降低网络拥塞、增强Web可扩展性的有效途径之一,其基本思...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作