Java可用HashMap实现轻量级事件分发器:以事件类型为key、处理器列表为value,用ConcurrentHashMap和CopyOnWriteArrayList保障线程安全与遍历安全,支持多处理器订阅与顺序执行。

Java 中可以用 HashMap 搭建一个轻量级事件分发器,核心思路是:用事件类型(如字符串或 Class)作 key,用事件处理器(如 Consumer<Event> 或自定义接口)列表作 value,触发时遍历对应处理器执行。
定义事件和处理器接口
先统一事件结构和处理契约,便于后续扩展:
- 定义一个基础事件类(可带泛型或属性):
public class Event { private final String type; public Event(String type) { this.type = type; } public String getType() { return type; } } - 定义处理器接口(推荐函数式接口,方便 lambda):
@FunctionalInterface public interface EventHandler { void handle(Event event); }
用 HashMap 存储事件类型到处理器列表的映射
使用 HashMap<String, List<EventHandler>> 管理订阅关系,注意线程安全和空值处理:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 初始化时建议用
ConcurrentHashMap(多线程场景)或加同步块(单线程可忽略) - 注册处理器时,先获取或创建对应类型的处理器列表:
handlers.computeIfAbsent(eventType, k -> new CopyOnWriteArrayList()).add(handler);
推荐CopyOnWriteArrayList,避免遍历时并发修改异常
实现发布与分发逻辑
分发方法接收事件对象,根据其类型查出所有处理器并逐个调用:
立即学习“Java免费学习笔记(深入)”;
- 提取事件类型(如
event.getType()或event.getClass().getSimpleName()) - 从 map 中获取处理器列表,判空后遍历执行:
List<EventHandler> list = handlers.get(event.getType()); if (list != null) { list.forEach(h -> h.handle(event)); } - 可选:支持通配符或继承匹配(如用
Class<?>作 key,配合isAssignableFrom),但会增加复杂度
简单使用示例
几行代码就能完成订阅与触发:
-
订阅:
dispatcher.register("user.login", e -> System.out.println("收到登录事件")); -
发布:
dispatcher.dispatch(new Event("user.login")); - 支持同一事件多个处理器,顺序按注册顺序(若用
CopyOnWriteArrayList)

















