Event Driven 设计框架
一个基于事件驱动的架构设计,有几个重要组件:事件消息(Event),针对该事件消息的具体处理逻辑(handle),接受事件消息的通道(Queue),和对事件消息如何进行分配的分发器(Event Loop)
简单的示例
- 事件消息 Event
/**
* Event 包含所属类型 和自身数据
*/
public class Event {
// 类型
private final String type;
// 数据
private final String data;
public Event(String type, String data) {
this.type = type;
this.data = data;
}
public String getType() {
return type;
}
public String getData() {
return data;
}
}
- 其他的四个组件
/**
* Event Driven 模式简单测试
*/
public class SimpleEventDriven {
// Event Handlers start 处理数据的方式
// 处理A类型 将数据变小写
public static void handleEventA(Event e){
System.out.println(e.getData().toLowerCase());
}
// 处理B类型 将数据变大写
public static void handleEventB(Event e){
System.out.println(e.getData().toUpperCase());
}
// end
public static void main(String[] args) {
// Channel start 接收消息的通道
Queue<Event> events = new LinkedList<>();
// end
events.add(new Event("A","HEllo"));
events.add(new Event("A","A Have"));
events.add(new Event("B","heLLO"));
events.add(new Event("B","b havE"));
// Event Loop start 根据Event的类型执行不同的操作
Event event;
while (!events.isEmpty()){
event = events.remove();
switch (event.getType()){
case "A":
handleEventA(event);
break;
case "B":
handleEventB(event);
break;
}
}
// end
}
}
输出结果:
hello
a have
HELLO
B HAVE
进一步的抽象
- Event和进一步的抽象Message
/**
* 事件消息 Event 更高级抽象
*/
public interface Message {
/**
* 返回 事件消息的类型
*/
Class<? extends Message> getType();
}
/**
* Event 是Message的最简单实现 以后使用中,这个类作为其他Message类的基类即可
* 类似适配器模式
*/
public class Event implements Message{
@Override
public Class<? extends Message> getType(