“责任链模式:链式审批,灵活应对,责任到人!“
·
责任链模式:让请求处理更灵活
一、责任链模式的定义
责任链模式是一种设计模式,其核心思想是将请求的发送者和接收者解耦,使多个对象都有机会处理请求。这些对象连接成链,并沿链传递请求,直到有对象处理它。
二、生活实例类比
- 公司请假审批流程
在公司中,员工请假需要经过多个审批环节。从部门经理到人力资源部再到总经理,每个环节都是责任链中的一环。员工提交请假申请后,依次经过每个审批环节,直到最终得到批准或驳回。
- 医院就诊流程
在医院就诊时,患者需要经过挂号、就诊、检查、取药等多个环节。每个环节都有相应的医生或护士负责处理。患者提交就诊请求后,依次经过每个环节,直到完成整个就诊过程。
三、责任链模式的结构组件
-
抽象处理者(Handler):定义一个处理请求的接口,包含一个方法用于传递下一个处理者。
-
具体处理者(Concrete Handler):实现抽象处理者的接口,定义自己的处理逻辑和传递下一个处理者的方法。
-
客户端(Client):创建并组装责任链,将请求传递给第一个处理者。
四、代码示例
// 抽象处理者
abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
public abstract void handleRequest(String request);
}
// 具体处理者1:日志级别过滤
class LoggerFilterHandler extends Handler {
@Override
public void handleRequest(String request) {
if (request.contains("ERROR")) {
System.out.println("LoggerFilterHandler: 处理错误日志");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 具体处理者2:权限验证
class PermissionCheckHandler extends Handler {
@Override
public void handleRequest(String request) {
if (request.contains("admin")) {
System.out.println("PermissionCheckHandler: 权限验证通过");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 客户端组装链
public class ChainDemo {
public static void main(String[] args) {
Handler loggerFilter = new LoggerFilterHandler();
Handler permissionCheck = new PermissionCheckHandler();
loggerFilter.setNextHandler(permissionCheck);
loggerFilter.handleRequest("This is an ERROR message.");
loggerFilter.handleRequest("This is a normal message.");
}
}
五、优缺点
优点:
- 避免请求发送者与接收者的耦合。
- 动态组合处理者,提高系统的灵活性。
- 便于扩展新的处理器。
缺点:
- 处理器过多可能导致性能下降。
- 链的维护成本较高。
六、典型应用场景
- 日志系统:如java.util.logging.Logger的日志处理器链。
- 权限验证系统。
- 异常处理系统。
- 网络协议解析器。
七、源码分析与应用
-
Java标准库中的责任链实现:java.util.logging.Logger的日志处理器链。
-
开源框架中的应用:
- Netty的ChannelPipeline:用于管理客户端和服务器的Channel之间的消息传输和事件通知。
- Spring的Interceptor链:用于拦截Controller方法执行过程中的请求和响应。
更多推荐


所有评论(0)