责任链模式
2026/3/23原创大约 1 分钟约 402 字
这种模式非常适合处理需要按顺序执行多个步骤的场景,每个步骤(或称“处理器”)负责一项特定的校验或操作。
- 核心思想:将请求的处理者串联成一条链,请求沿着链传递,直到被某个处理者处理。
- 优点:
解耦:请求的发送者和接收者解耦。 高扩展性:可以动态地增加、删除或重新排列处理节点,符合“开闭原则”。 单一职责:每个处理器只关注自己的逻辑。
- 适用场景:订单审核、请求过滤、数据校验等。
1. 简化的订单处理链
1.1. 定义处理器抽象类
public abstract class OrderHandler {
protected OrderHandler nextHandler;
public OrderHandler setNext(OrderHandler nextHandler) {
this.nextHandler = nextHandler;
return nextHandler; // 支持链式调用
}
public abstract void handle(Order order);
protected void handleNext(Order order) {
if (nextHandler != null) {
nextHandler.handle(order);
}
}
}1.2. 实现具体处理器
public class StockValidationHandler extends OrderHandler {
@Override
public void handle(Order order) {
System.out.println("执行库存校验...");
// 模拟校验逻辑
boolean stockOk = true;
if (stockOk) {
System.out.println("库存校验通过。");
handleNext(order); // 传递给下一个
} else {
throw new RuntimeException("库存不足!");
}
}
}
public class PriceCalculationHandler extends OrderHandler {
@Override
public void handle(Order order) {
System.out.println("计算订单价格...");
// 模拟价格计算
order.setTotalAmount(100.0);
handleNext(order);
}
}1.3. 组装并执行链条
public class OrderProcessing {
public static void main(String[] args) {
// 像搭积木一样构建流程
OrderHandler chain = new StockValidationHandler()
.setNext(new PriceCalculationHandler());
Order myOrder = new Order();
chain.handle(myOrder);
}
}