【java】简单的事件总线EventBus】的更多相关文章

public class EventBus { private static Map<String, EventListener> eventListeners = new HashMap<>(); public static void addEventListener(EventListener listener) { String listenerName = getListenerName(listener); eventListeners.put(listenerName,…
公共事件总线eventBus的实质就是创建一个vue实例,通过一个空的vue实例作为桥梁实现vue组件间的通信.它是实现非父子组件通信的一种解决方案. 用法如下: 第一步:项目中创建一个js文件(我通常给它取个名字为bus.js),引入vue,创建一个vue实例,导出这个实例,代码如下(一共就两行): import Vue from 'Vue' export default new Vue   第二步:在两个需要通信的两个组件中分别引入这个bus.js      import Bus from…
什么是EventBusEventBus是对发布-订阅模式的一种实现.其以一种非常优雅的方式实现了组件间的解耦与通信,在Android开发.DDD等领域都有非常广泛的应用. 事件流大致如下: Producer向EventBus发送事件. EventBus向所有监听了该事件的Consumer推送事件. 监听了该事件的Consumer消费事件. 注:一个组件即可以是Producer,也可以是Consumer. 分布式服务间的EventBus在分布式系统中,事件在服务之间的传递要比单机EventBus复…
EventBus 直译过来就是事件总线,它使用发布订阅模式支持组件之间的通信,不需要显式地注册回调,比观察者模式更灵活,可用于替换Java中传统的事件监听模式,EventBus的作用就是解耦,它不是通用的发布订阅系统,也不能用于进程间通信.可用于Android的EventBus库主要有这几个:Google出品的Guava,Guava是一个庞大的库,EventBus 只是它附带的一个小功能,因此实际项目中使用并不多.用的最多的是greenrobot/EventBus,这个库的优点是接口简洁,集成方…
本文由云+社区发表 事件总线核心逻辑的实现. EventBus的作用 Android中存在各种通信场景,如Activity之间的跳转,Activity与Fragment以及其他组件之间的交互,以及在某个耗时操作(如请求网络)之后的callback回调等,互相之之间往往需要持有对方的引用,每个场景的写法也有差异,导致耦合性较高且不便维护.以Activity和Fragment的通信为例,官方做法是实现一个接口,然后持有对方的引用,再强行转成接口类型,导致耦合度偏高.再以Activity的返回为例,一…
顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity.Fragment.Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码更加简洁,耦合性更低,提升了我们的代码质量.但它能做的却不仅限于这些.经过定制,它能完成很多有意思的功能,那么究竟该怎么做呢?就让我们一起往下看吧. 不堪回首的痛 首先,让我们先来看看这么一个场景:你是否在开发的过程中遇到过从Activity-A跳转到Activity-B,然后需要在Activity…
1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉.事件总线是对发布-订阅模式的一种实现.它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的. 我们来看看事件总线的处理流程: 了解了事件总线的基本概念和处理流程,下面我们就来分析下如何去实现事件总线. 2.回归本质 在动手实现事件总线之前,我们还是要追本溯源,探索一下事件的本质和发布订阅模式的实现机制. 2.1.事件的本质 我们先来探讨一下事件的概念.都是读…
什么是事件总线管理? 将事件放到队列里,用于管理和分发: 保证应用的各个部分之间高效的通信及数据,事件分发: 模块间解耦: 什么是EventBus? EventBus是发布/订阅的事件总线.EventBus模式-也被称为MessageBus或者发布者/订阅者(publisher/subcriber)模式——可以让两个组件相互通信,但是他们之间并不相互知晓. 基于事件总线管理/订阅/分发模式的.事件响应有更多的线程选择,EventBus可以向不同的线程中发布事件.EventBus支持Sticky…
文章阅读请前先参考看一下 https://www.cnblogs.com/hudean/p/13858285.html 安装RabbitMQ消息队列软件与了解C#中如何使用RabbitMQ 和 https://www.cnblogs.com/Keep-Ambition/p/8038885.html 添加一个用户并可以远程访问,  消息队列的作用:跨服务通信.服务之间解耦,削峰.异步,其实还有一个作用是提高接收者性能 RabbitMQ 官方网站:https://www.rabbitmq.com/…
这个EventBus的实现是基于微软微服务https://github.com/dotnet-architecture/eShopOnContainers项目的,我把它从项目中抽离出来,打包成nuget包方便大家快速集成到项目中 从Nuget.org中安装 PM> Install-Package Toosame.EventBus.RabbitMQ -Version 1.1.2 使用 共3步: 添加事件 添加事件处理器 从控制器发布事件 1.添加事件 创建YourEvent.cs文件 1 publ…
661. .net中事件模型很优雅的实现了观察者模式,同时被大量的使用在各种框架中. [2016-04-30 10:52:42]662. Prism框架中实现了一个典型的EventAggregator,有时候我们又把此类实现叫做EventBus. [2016-04-30 10:53:12]663. EventBus内部通过一个类型为ConcurrentDictionary<Type,List<Action<object>>> 的字典来存储主题和观察者列表 [2016-0…
Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计. 不再多的废话,直奔Guava EventBus主题.首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官方理由是并不想我们我们的使用方式.当然如果我们想其为单例,我们可以很容易封装它,一个单例模式保证只创建一个实例就对了. 下面…
EventBus(事件总线) Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计. 不再多的废话,直奔Guava EventBus主题.首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官方理由是并不想我们我们的使用方式.当然如果我们想其为单例,我们可以很容易封装它,一个单例模式保…
在C#中,我们可以在一个类中定义自己的事件,而其他的类可以订阅该事件,当某些事情发生时,可以通知到该类.这对于桌面应用或者独立的windows服务来说是非常有用的.但对于一个web应用来说是有点问题的,因为对象都是在web请求中创建的,而且这些对象生命周期都很短,因而注册某些类的事件是很困难的.此外,注册其他类的事件会使得类紧耦合.事件总线便可以用来解耦并重复利用应用中的逻辑. 事件总线带来的好处和引入的问题 好处比较明显,就是独立出一个发布订阅模块,调用者可以通过使用这个模块,屏蔽一些线程切换…
EventBus事件总线的使用-自己实现事件总线   在C#中,我们可以在一个类中定义自己的事件,而其他的类可以订阅该事件,当某些事情发生时,可以通知到该类.这对于桌面应用或者独立的windows服务来说是非常有用的.但对于一个web应用来说是有点问题的,因为对象都是在web请求中创建的,而且这些对象生命周期都很短,因而注册某些类的事件是很困难的.此外,注册其他类的事件会使得类紧耦合.事件总线便可以用来解耦并重复利用应用中的逻辑. 事件总线带来的好处和引入的问题 好处比较明显,就是独立出一个发布…
用例:假设公司发布了一个公告 需要通过短信 和 邮件分别2种方式 通知员工 1:首先我们建立领域模型 /// <summary> /// 领域核心基类 /// </summary> public abstract class Core { public string Id { set; get; } = Guid.NewGuid().ToString(); } public interface ICore { } 2:消息模型 /// <summary> /// 通知的…
项目中使用了事件总线eventBus来进行两个组件间的通信, 使用方法是是建立eventBus.js文件,暴露一个空的Vue实例,如下: import Vue from 'vue'export default new Vue();在需要通信的两个组件中分别import import bus from "common/utils/eventBus";然后就可以通过emit.on进行通信:如下: 一个组件中发射bus.$emit('SUBMITSEARCH_PEOPLE',this.sea…
发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方: 1,比如在子线程构造方法里面进行实现总线的注册操作: 2,要想子线程中接收消息的功能执行,必须启动线程. 3,添加tag和不添加tag类似其他. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.util.List; import org.simple.eventbus.EventBus; import…
这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.util.List; import org.simple.eventbus.EventBus; import org.simple.eventbus.Subscriber; import org.simple.eventbus.ThreadMode; import android.content.Inte…
1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().postSticky(newUser("soyoungboy","西安财经学院"),"soyoungboy");. 2,接受到事件后,很有必要移除事件里面的内容,否则事件内容会多次叠加:EventBus.getDefault().removeStick…
DDD事件总线 基本思路: (1)       在事件总线内部维护着一个事件与事件处理程序相映射的字典. (2)       利用反射,事件总线会将实现了IEventHandler的处理程序与相应事件关联到一起,相当于实现了事件处理程序对事件的订阅. (3)       当发布事件时,事件总线会从字典中找出相应的事件处理程序,然后利用反射去调用事件处理程序中的方法. 核心类(事件总线类) 1 using System; 2 using System.Collections.Generic; 3…
最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去. 使用的框架地址:https://github.com/bboyfeiyu/AndroidEventBus Sticky 事件 使用例子: 1,首先每个Activity或者fragement都要进行eventBus的注册和反注册. 发送sticky事件的activity: package com.example.mysimpleeventbus; import org.…
基本思路: (1)       在事件总线内部维护着一个事件与事件处理程序相映射的字典. (2)       利用反射,事件总线会将实现了IEventHandler的处理程序与相应事件关联到一起,相当于实现了事件处理程序对事件的订阅. (3)       当发布事件时,事件总线会从字典中找出相应的事件处理程序,然后利用反射去调用事件处理程序中的方法. 核心类(事件总线类) using System; using System.Collections.Generic; using System.L…
事件总线(Event Bus)可以在vue项目的index.js文件中创建,也可以在一个独立的.vue文件中创建.使用时,在各个子组件中引入该组件即可. 项目中的全屏loading较多时,可以在根组件App.vue中添加一个loading,再结合Event Bus,即可在子组件中唤起该loading. 代码如下: //EventBus.vue <template> </template> <script> import Vue from "vue";…
目录 简介 实现事件总线 定义事件基类 定义事件参数基类 定义EventBus 使用事件总线 事件及事件参数 定义发布者 定义订阅者 实际使用 总结 参考资料 简介 事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的. 实现事件总线 EventBus维护一个事件的字典,发布者.订阅者在事件总线中获取事件实例并执行发布.订阅操作,事件实例负责维护.执行事件处理程序.流程如下: 定义事件基类 事件实例需要在事件总线中注…
当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,例如:当某一条件发生时,应用中有几个部件对这个消息感兴趣,那么我们通常采用的就是观察者模式,使用观察者模式有一个弊病就是部件之间的耦合度太高,在这里将会详细介绍Android中的解耦组件EventBus的使用. EventBus简介 Publisher-Subscriber这种设计模式在GoF中早就详细的解释.也是一种最常用不过的设计模式.而EventBus则是对于Publisher和Subscriber的一种实现,如…
事件总线框架 针对事件提供统一订阅,发布以达到组件间通信的解决方案. 原理 观察者模式. EventBus和Otto 先看EventBus的官方定义: Android optimized event bus that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality. 再看Otto官方定义: Otto is an event bus d…
在平时写代码的过程中,我们需要实现这样一种功能:当执行某个逻辑时,希望能够进行其他逻辑的处理.最粗暴的方法是直接依赖其他模块,调用该模块的相应函数或者方法.但是,这样做带来一些问题. 模块间相互依赖,耦合度高.以下订单为例,订单提交后需要进行支付以及进行一些其他处理,如发邮件等操作.相关的代码可能是这样.可以看到:订单模块依赖了支付服务以及用户服务. 维护困难.由于模块间相互依赖,当需要修改订单逻辑时则需要修改submitOrder方法的源代码,而某些时候可能无法修改.再者,如果有多个这种逻辑,…
原理 一句话描述:register会把当前类中匹配的方法,存入一个map,而post会根据实参去map查找进行反射调用 撇开专业术语,其实EventBus就是在内部[存储]了一堆onEvent开头的方法,然后post的时候,根据post传入的[参数],去找到匹配的方法,[反射]调用之. 另外,它内部使用了[Map]进行存储,[键就是参数的Class类型].知道是这个类型,那么你觉得根据post传入的参数进行查找还是个事么? 其实不用发布者,订阅者,事件,总线这几个词或许更好理解,以后大家问了Ev…
简介 地址:https://github.com/greenrobot/EventBus EventBus是一个[发布 / 订阅]的事件总线.简单点说,就是两人[约定]好怎么通信,一人发布消息,另外一个约定好的人立马接收到你发的消息. EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息. 优点:开销小,代码更优雅,将发送者和接收者解耦. 用处:相信大…