一种事件传递的方法及系统技术方案

技术编号:14273747 阅读:61 留言:0更新日期:2016-12-23 18:23
本发明专利技术涉及消息传递领域,尤其涉及一种事件传递的方法及系统。本发明专利技术通过继承观察者模板类,得到观察者类;在所述观察者类中重写事件处理函数;创建观察者链表;所述观察者链表的ID与所述被观察事件的ID相同;添加与所述被观察事件相关的观察者类至所述观察者链表;将所述被观察事件发送至事件队列;所述事件队列包括主线程事件队列和工作线程事件队列;分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类;所述事件处理函数处理所述被观察事件。实现了高效地在模块间传递事件且能够降低模块间的耦合性。

【技术实现步骤摘要】

本专利技术涉及消息传递领域,尤其涉及一种事件传递的方法及系统
技术介绍
现有技术中,功能模块间的事件通知传递方法主要有以下两种:一种是预先设置模块间的回调函数。由于回调函数是静态函数或全局函数,而且函数原型都是固定的,这样导致了事件参数和类对象的传递变得非常局限,实现过程麻烦且代码可读性差;另一种是利用类接口或者类成员函数委托的方式进行事件传递,这种虽然解决了前者的问题,但是这些方式都是直接把类实例和成员函数直接以委托的方式交给调用者,也就是说调用者在回调委托的时候,需要关心该委托对象是否被销毁,导致模块间的维护变得很麻烦。而且不管前者还是后者,随着越来越多的业务逻辑需要处理,模块存在大量的消息通信,这些导致严重的代码耦合问题。申请号为201410551054.7的专利文献《基于事件总线的模块间消息传递机制》公开了一种不同功能模块间的消息传递方法,通过在订阅者类中实现各种事件的订阅函数并进行标注,订阅者向事件总线注册事件;事件总线进行事件注册后,通过反射机制找出注册对象中被标注的订阅函数,生成订阅者对象;以订阅事件为key,用map来维护订阅者信息,所述订阅者信息包括订阅者对象、回调事件函数及事件类型;通过反射机制分析订阅者对象,根据回调事件函数回调的Method名字确定事件执行方式并遍历map进行事件分发。解决了现有软件编程过程中模块间耦合严重的问题。上述基于事件总线的模块间消息传递机制,虽然改善了模块间耦合的问题,但是该方法是基于Java注解的方式,然后通过反射得到事件订阅者的回调函数,消息传递的效率较低。
技术实现思路
本专利技术所要解决的技术问题是:本专利技术提供一种事件传递的方法及系统,实现高效地在模块间传递事件且能够降低模块间的耦合性。为了解决上述技术问题,本专利技术采用的技术方案为:本专利技术提供一种事件传递的方法,包括:继承观察者模板类,得到观察者类;所述观察者模板类包括主线程观察者模板类和工作线程观察者模板类,继承主线程观察者模板类的观察者类在主线程调用相应的被观察事件,继承工作线程观察者模板类的观察者类在工作线程调用相应的被观察事件;在所述观察者类中重写事件处理函数;创建观察者链表;所述观察者链表的ID与所述被观察事件的ID相同;添加与所述被观察事件相关的观察者类至所述观察者链表;将所述被观察事件发送至事件队列;所述事件队列包括主线程事件队列和工作线程事件队列;分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类;所述事件处理函数处理所述被观察事件。本专利技术还提供一种事件传递的系统,包括:继承模块,用于继承观察者模板类,得到观察者类;所述观察者模板类包括主线程观察者模板类和工作线程观察者模板类,继承主线程观察者模板类的观察者类在主线程调用相应的被观察事件,继承工作线程观察者模板类的观察者类在工作线程调用相应的被观察事件;重写模块,用于在所述观察者类中重写事件处理函数;创建模块,用于创建观察者链表;所述观察者链表的ID与所述被观察事件的ID相同;添加模块,用于添加与所述被观察事件相关的观察者类至所述观察者链表;发送模块,用于将所述被观察事件发送至事件队列;所述事件队列包括主线程事件队列和工作线程事件队列;分发模块,用于分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类;处理模块,用于所述事件处理函数处理所述被观察事件。本专利技术的有益效果在于:通过继承观察者模板类得到观察者类,实现快速地创建在主线程中工作的观察者类和在工作线程中工作的观察者类,对于一些比较耗时的事件,在工作线程中处理能够减少占用主线程的资源从而提高用户体验;根据被观察事件重写观察者类中的事件处理函数,该事件处理函数可直接接收被观察事件的实例,提高了模块间消息传递的效率;通过观察者链表绑定被观察事件与相关的观察者类,一个被观察事件可绑定多个观察者类,通过观察者链表可方便地维护被观察事件与观察者类之间的关系,此外,系统可根据观察者链表将被观察事件分发给相关的观察者类,从而降低了模块间的耦合性。附图说明图1为本专利技术一种事件传递的方法的流程框图;图2为本专利技术一种事件传递的系统的结构框图;图3为本专利技术一种事件传递的方法的实施例一的流程框图;图4为本专利技术一种事件传递的方法的实施例二的流程框图;图5为本专利技术一种事件传递的方法的实施例三的流程框图;标号说明:1、继承模块;2、重写模块;3、创建模块;4、添加模块;5、发送模块;6、分发模块;7、处理模块。具体实施方式为详细说明本专利技术的
技术实现思路
、所实现目的及效果,以下结合实施方式并配合附图予以说明。本专利技术最关键的构思在于:通过继承观察者模板类得到观察者类,实现快速地创建在主线程中工作的观察者类和在工作线程中工作的观察者类;根据被观察事件重写观察者类中的事件处理函数,提高了模块间消息传递的效率;通过观察者链表绑定被观察事件与相关的观察者类,使得系统可根据观察者链表将被观察事件分发给相关的观察者类,从而降低了模块间的耦合性。请参照图1至图5,如图1所示,本专利技术提供一种事件传递的方法,包括:继承观察者模板类,得到观察者类;所述观察者模板类包括主线程观察者模板类和工作线程观察者模板类,继承主线程观察者模板类的观察者类在主线程调用相应的被观察事件,继承工作线程观察者模板类的观察者类在工作线程调用相应的被观察事件;在所述观察者类中重写事件处理函数;创建观察者链表;所述观察者链表的ID与所述被观察事件的ID相同;添加与所述被观察事件相关的观察者类至所述观察者链表;将所述被观察事件发送至事件队列;所述事件队列包括主线程事件队列和工作线程事件队列;分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类;所述事件处理函数处理所述被观察事件。进一步地,将所述被观察事件发送至事件队列,具体为:判断所述被观察事件是否需要在主线程处理;若是,则将所述被观察事件的实例发送至主线程事件队列;否则,将所述被观察事件的实例发送至工作线程事件队列。由上述描述可知,以被观察事件是否需要在主线程处理为依据,将被观察事件发送至主线程事件队列或工作线程事件队列,有利于后续对不同的被观察事件进行不同的调度和管理。进一步地,将所述被观察事件发送至事件队列,具体为:拷贝被观察事件的实例,得到拷贝实例;判断所述被观察事件是否需要在主线程处理;若是,则将所述拷贝实例发送至主线程事件队列;否则,将所述拷贝实例发送至工作线程事件队列。由上述描述可知,将拷贝的被观察事件的实例发送至事件队列,有利于防止被观察事件的实例被销毁后丢失重要数据,提高了事件传递过程中的可靠性。进一步地,分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类,具体为:获取所述主线程事件队列中的被观察事件的实例,得到第一事件实例;获取与所述第一事件实例相对应的观察者链表,得到第一观察者链表;获取第一观察者链表中的观察者类的实例,得到第一观察者实例;将所述第一事件实例发送给第一观察者实例。由上述描述可知,可将主线程事件队列中的被观察事件的实例发送给观察者链表中记录的相关观察者类的实例。进一步地,分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类,还包括:获取所述工作线程事件队列中的被观察事件的实例,得到第二事件实例;获取与所述第二事件实例相本文档来自技高网
...
一种事件传递的方法及系统

【技术保护点】
一种事件传递的方法,其特征在于,包括:继承观察者模板类,得到观察者类;所述观察者模板类包括主线程观察者模板类和工作线程观察者模板类,继承主线程观察者模板类的观察者类在主线程调用相应的被观察事件,继承工作线程观察者模板类的观察者类在工作线程调用相应的被观察事件;在所述观察者类中重写事件处理函数;创建观察者链表;所述观察者链表的ID与所述被观察事件的ID相同;添加与所述被观察事件相关的观察者类至所述观察者链表;将所述被观察事件发送至事件队列;所述事件队列包括主线程事件队列和工作线程事件队列;分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类;所述事件处理函数处理所述被观察事件。

【技术特征摘要】
1.一种事件传递的方法,其特征在于,包括:继承观察者模板类,得到观察者类;所述观察者模板类包括主线程观察者模板类和工作线程观察者模板类,继承主线程观察者模板类的观察者类在主线程调用相应的被观察事件,继承工作线程观察者模板类的观察者类在工作线程调用相应的被观察事件;在所述观察者类中重写事件处理函数;创建观察者链表;所述观察者链表的ID与所述被观察事件的ID相同;添加与所述被观察事件相关的观察者类至所述观察者链表;将所述被观察事件发送至事件队列;所述事件队列包括主线程事件队列和工作线程事件队列;分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类;所述事件处理函数处理所述被观察事件。2.根据权利要求1所述的事件传递的方法,其特征在于,将所述被观察事件发送至事件队列,具体为:判断所述被观察事件是否需要在主线程处理;若是,则将所述被观察事件的实例发送至主线程事件队列;否则,将所述被观察事件的实例发送至工作线程事件队列。3.根据权利要求1所述的事件传递的方法,其特征在于,将所述被观察事件发送至事件队列,具体为:拷贝被观察事件的实例,得到拷贝实例;判断所述被观察事件是否需要在主线程处理;若是,则将所述拷贝实例发送至主线程事件队列;否则,将所述拷贝实例发送至工作线程事件队列。4.根据权利要求1所述的事件传递的方法,其特征在于,分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类,具体为:获取所述主线程事件队列中的被观察事件的实例,得到第一事件实例;获取与所述第一事件实例相对应的观察者链表,得到第一观察者链表;获取第一观察者链表中的观察者类的实例,得到第一观察者实例;将所述第一事件实例发送给第一观察者实例。5.根据权利要求1所述的事件传递的方法,其特征在于,分发所述事件队列中的所述被观察事件给所述观察者链表中的观察者类,还包括:获取所述工作线程事件队列中的被观察事件的实例,得到第二事件实例;获取与所述第二事件实例相对应的观察者链表,得到第二观察者链表;获取第二观察者链表中的观察者类的实例,得到第二观察者实例;判断工作线程是否处于空闲状态;若是,则将所述第二事件实例发送给第二观察者实例。6.根据权利要求1所述的事件传递的方法,其特征在于,还包括:撤销绑定所述观察者类与所述被观察事件。7.根据权利要求6所述的事件传...

【专利技术属性】
技术研发人员:刘德建郑凌耿方振华郭玉湖
申请(专利权)人:福建天泉教育科技有限公司
类型:发明
国别省市:福建;35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1