一、框架实现篇
关键角色:
- 事件源(XXXEvent):能够接收外部事件的源体,内部包含事件的类型。
- 事件监听器(XXXEventListener):能够接收事件源通知的对象。
- 事件分发器(EventDispatcher):维护事件类型与事件监听器列表的映射关系,接收事件并进行事件的派发。
- 事件监听器管理类(EventListenerManager):声明一系列的事件监听器,通过@EventAnnotation定义该事件监听器感兴趣的事件类型,最后通过反射的方式实现事件监听器自动注册到EventDispatcher。
架构图
------------------------------------------------------------------------------------------------------------
话不多说,直接上代码
-------------------------------------------------------------------------------------------------------------
(1)定义事件类型EventType
package com.example.demo.eventdriven;
/**
*
* @ClassName: EventType
* @Description: 事件类型
* @Author: liulianglin
* @DateTime 2022年4月21日 下午3:35:56
*/
public enum EventType {
LOGIN,//登陆事件
EXIT,//退出事件
;
}
(2)定义事件基类BaseEvent
package com.example.demo.eventdriven;
/**
*
* @ClassName: BaseEvent
* @Description: 基础事件类
* @Author: liulianglin
* @DateTime 2022年4月21日 下午3:34:19
*/
public class BaseEvent {
//是否在消息主线程同步执行
private boolean sync = true;
//事件类型
private final EventType evtType;
public BaseEvent (EventType evtType) {
this.evtType = evtType;
}
public BaseEvent (EventType evtType,boolean sync) {
this.evtType = evtType;
this.sync = sync;
}
public EventType getEvtType() {
return evtType;
}
/**
* 是否在消息主线程同步执行
* @return
*/
public boolean isSync() {
return sync;
}
public void setSync (boolean sync) {
this.sync = sync;
}
}
(3)定义事件监听器接口EventListener
package com.example.demo.eventdriven;
/**
*
* @ClassNam