上一篇文章介绍了事件驱动的基本组件。 本文开发了一个事件驱动的框架。
信息系统
事件驱动框架引用某些消息系统的模式。 进行以下类比。 事件和消息、事件处理器和信道、事件中继器和路由。
一个例子是邮政系统。 邮递员背包里有几封信,那里有收件人的地址。 邮递员必须把信送到合适的地址。 这个过程可以描述如下吗?
流程交付_ letters (satchel ) :
repeat
letter :=next _ letter (satchel )
for home in homes do:
if letter.destination==home :
dliver_letter(home ) )。
end if
end for
until satchel is empty
结束进程
在本例中,可以使用事件驱动的编程建模。 然后,以最抽象的形式开发框架,对系统进行建模。
消息
每条消息都有特定的类型,类型将消息与处理器相关联。 消息接口的定义如下:
公共接口消息{
publicclassextendsmessagegettype (;
}
(“管道”) )。
管道与某种类型的消息相关联。 我们把消息发送到每条消息的各自管道进行处理。
公共接口信道{
公共语音显示(e message;
}
动态路由
消息系统的交换通过路由进行。 路由将指定的消息转发到特定的信道。 在初始化阶段,路由注册消息及其关联的通道。 然后,通过路由传输的消息自动与消息类型和相关管道匹配,并被路由到相关管道。
publicinterfacedynamicrouter { publicvoidregisterchannel (classextendsecontenttype,Channel extends E channel ); publicabstractvoiddispatch }
然后,实现这些接口以创建完整的框架。
框架的实施
活动
我们将事件定义为消息的子类。
导入消息; publicclasseventimplementsmessage { @ overridepublicclassextendsmessagegettype () { return getClass; }
处理器
处理器最终接收并处理事件。 在这里实现流水线接口。
导入通道;
publicclasshandlerimplementschannel {
@Override
公共void dispatch (事件消息)。
system.out.println (message.getclass () );
}
}
事件中继器
事件中继器用于注册消息和通道。 本示例注册处理器及其关联的事件类。 我用HashMap把这个和处理器关联起来了。
import java.util.HashMap; import java.util.Map; import edu.gio cc.util.router.channel; import edu.gio cc.util.router.dynamic router; publicclasseventdispatcherimplementsdynamicrouter { privatemap,Handler handlers; public EventDispatcher () { Handlers=new HashMap,handler ); } @ overridepublicvoidregisterchannel (classextendseventcontenttype, Channel extends Event channel ) Handlers.put ) content } @ overridepublicvoiddispatch (event content ) Handlers.get ) content }
基本框架已经完成。 接下来进行测量。
公共类程序{
publicstaticvoidmain (string [ ] args ) {
eventdispatcherdispatcher=neweventdispatcher (;
dispatcher.register channel (event.class,new Handler () );
dispatcher.dispatch(newevent ) );
}
}
在APP应用中进行扩展
现在,框架已创建。 一般来说,通用框架需要以下特性。
控件翻转就像消息系统一样,框架控制数据流。
可扩展性APP应用程序可以根据使用情况进行扩展。
无法更改帧代码。 无法更改帧代码。
上述属性说明了APP应用程序如何连接到框架。 框架是体系结构的抽象东西。
Handler和Event类是框架层的类。 基于框架开发的代码必须位于APP应用层。 框架是抽象和提供事件驱动架构的基础工具。
现在,您可以通过继承Handler类来创建事件处理程序,并通过继承Event类来创建事件。 它还将向调度程序注册这些事件处理程序和事件。
下一篇文章给出了仿真事件驱动系统的框架的具体实现。