Java责任链模式详解与应用

360影视 国产动漫 2025-05-06 11:54 2

摘要:责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许将请求沿着处理链传递,直到某个对象处理它或链结束。它的核心思想是解耦请求发送者和接收者,允许多个对象都有机会处理请求。

责任链模式(Chain of Responsibility Pattern)是一种 行为型设计模式,允许将请求沿着处理链传递,直到某个对象处理它或链结束。它的核心思想是 解耦请求发送者和接收者,允许多个对象都有机会处理请求。

模式结构

抽象处理者(Handler)

Ø 定义处理请求的接口(通常包含 handleRequest 方法)。

Ø 持有下一个处理者的引用(nextHandler)。

具体处理者(Concrete Handler)

Ø 实现 handleRequest 方法,决定是否处理请求或传递给下一个处理者。

客户端(Client)

Ø 构建处理链,并向链的头部发起请求。

代码示例:请假审批流程

假设一个公司请假审批流程:
员工 → 经理(3天内) → 总监(5天内) → CEO(不限天数)

1. 定义抽象处理者

java

public abstract class Handler {

protected Handler nextHandler; // 下一个处理者

public void setNext(Handler nextHandler) {

this.nextHandler = nextHandler;

}

public abstract void handleRequest(int days);

}

2. 具体处理者实现

java

// 经理处理者(审批3天内的请假)

public class ManagerHandler extends Handler {

@Override

public void handleRequest(int days) {

if (days

System.out.println("经理批准了" + days + "天假期");

} else if (nextHandler != null) {

nextHandler.handleRequest(days); // 传递给下一个处理者

}

}

}

// 总监处理者(审批5天内的请假)

public class DirectorHandler extends Handler {

@Override

public void handleRequest(int days) {

if (days

System.out.println("总监批准了" + days + "天假期");

} else if (nextHandler != null) {

nextHandler.Handlerequest(days);

}

}

}

// CEO处理者(审批所有请假)

public class CEOHandler extends Handler {

@Override

public void handleRequest(int days) {

System.out.println("CEO批准了" + days + "天假期");

}

}

3. 客户端构建责任链

java

public class Client {

public static void main(String args) {

// 创建处理者

Handler manager = new ManagerHandler;

Handler director = new DirectorHandler;

Handler ceo = new CEOHandler;

// 构建责任链:Manager → Director → CEO

manager.setNext(director);

director.setNext(ceo);

// 发起请求

manager.handleRequest(2); // 经理处理

manager.handleRequest(4); // 总监处理

manager.handleRequest(6); // CEO处理

}

}

输出结果:

经理批准了2天假期

总监批准了4天假期

CEO批准了6天假期

责任链模式的特点

优点

解耦请求与处理:发送者无需知道具体由谁处理请求。动态扩展性:可灵活增删处理者或调整链的顺序。符合单一职责原则:每个处理者只负责自己的逻辑。

缺点

请求可能未被处理:需要确保链的完整性。性能问题:长链可能导致请求传递较慢。

应用场景

多级审批流程(如请假、报销)。事件处理系统(如Java AWT事件传播)。日志记录框架(不同级别的Logger处理)。Web请求过滤链(如Servlet Filter、Spring Security)。

变体与注意事项

纯责任链:请求必须被某个处理者处理(如未处理,需抛出异常)。不纯责任链:允许请求未被处理(需兜底逻辑)。提前终止:处理者处理请求后,可选择是否继续传递。

责任链模式通过链式传递请求,实现了灵活的职责分配,是处理复杂流程的经典方案。

来源:老客数据一点号

相关推荐