java中枚举类可作为责任链的处理器类型标识与配置中心,通过枚举定义状态、绑定处理器实例,并由链对象按状态顺序调度执行。

Java 中枚举类可以作为责任链中“处理器类型”的统一标识和配置中心,配合责任链模式实现状态驱动的处理逻辑——核心在于用枚举定义状态、绑定处理器,并通过链式委托实现状态流转与职责分发。
用枚举统一管理状态与对应处理器
枚举本身是天然的单例集合,适合预定义有限状态(如 ORDER_CREATED、ORDER_PAID、ORDER_SHIPPED),同时可内聚每个状态关联的处理器实例或创建逻辑:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 在枚举中声明一个抽象方法(如 handle(Context ctx)),强制每个枚举常量实现自己的处理逻辑;
- 或声明一个字段(如 private final Handler handler),在构造时注入具体处理器(推荐,利于解耦和测试);
- 提供静态工厂方法(如 byState(State state))根据状态获取对应处理器,作为责任链的入口。
构建可组合的责任链结构
不依赖枚举直接串联,而是让外部链对象(如 StateChain)持有处理器列表,按状态顺序组装。枚举只负责“注册”和“查找”,链本身控制执行流程:
- 定义通用处理器接口:interface StateHandler { boolean handle(Context ctx); };
- 各业务处理器(如 PaidHandler、ShippedHandler)实现该接口,并在构造时明确支持的状态(如 supportedState = State.ORDER_PAID);
- 链对象遍历处理器列表,调用 handler.supports(ctx.getState()) && handler.handle(ctx) 判断是否处理当前状态。
结合状态流转自动推进责任链
实际业务中状态常会变更(如支付成功后从 PAID 变为 SHIPPED),可在处理器内部触发状态更新,并交由链重新调度:
- Context 持有当前状态(State currentState)和可变业务数据;
- 某个处理器处理完后调用 ctx.setState(State.ORDER_SHIPPED);
- 链支持“递归调度”或“多轮遍历”:一次执行完所有匹配处理器,或每次只执行一个,再根据新状态重新走链。
示例关键代码片段
// 枚举定义状态与处理器映射
public enum State {
ORDER_CREATED(() -> new CreatedHandler()),
ORDER_PAID(() -> new PaidHandler()),
ORDER_SHIPPED(() -> new ShippedHandler());
private final Supplier
State(Supplier
public StateHandler getHandler() { return handlerSupplier.get(); }
}
// 链式调度器
public class StateChain {
private final List
public StateChain add(State state) { handlers.add(state.getHandler()); return this; }
public void process(Context ctx) {
for (StateHandler h : handlers) {
if (h.supports(ctx.getState()) && h.handle(ctx)) break;
}
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










