Java 高并发编程详解 19.0 Event Driven 模式

本文详细探讨了Java中的Event Driven设计模式,包括事件消息(Event)、处理逻辑(handle)、事件通道(Queue)和事件分发器(Event Loop)的概念。通过简单示例展示了如何构建事件驱动的架构,并进一步讨论了Event和Message的抽象,以及同步和异步通道、分发器的设计与测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Event Driven 设计框架

一个基于事件驱动的架构设计,有几个重要组件:事件消息(Event),针对该事件消息的具体处理逻辑(handle),接受事件消息的通道(Queue),和对事件消息如何进行分配的分发器(Event Loop)

简单的示例

  1. 事件消息 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;
    }
}
  1. 其他的四个组件

/**
 * 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

进一步的抽象

  1. Event和进一步的抽象Message

/**
 * 事件消息 Event 更高级抽象
 */
public interface Message {
   
   
    /**
     * 返回 事件消息的类型
     */
    Class<? extends Message> getType();
}


/**
 * Event 是Message的最简单实现 以后使用中,这个类作为其他Message类的基类即可
 * 类似适配器模式
 */
public class Event implements Message{
   
   
    @Override
    public Class<? extends Message> getType(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值