温州网站搭建公司,郑州高端做网站,网站建设的定义,移动端网站建设公司责任链模式#xff08;Chain of Responsibility Pattern#xff09;是一种行为型设计模式#xff0c;它将请求的发送者和接收者解耦#xff0c;使得多个对象都有机会处理请求#xff0c;而不是指定特定的接收者。在责任链中#xff0c;每个对象都是一个处理者#xff0c…责任链模式Chain of Responsibility Pattern是一种行为型设计模式它将请求的发送者和接收者解耦使得多个对象都有机会处理请求而不是指定特定的接收者。在责任链中每个对象都是一个处理者对请求进行判断或处理并且可以将请求传递给链中的下一个处理者。
原理
抽象处理者Handler: 定义了一个处理请求的接口包含了一个方法来处理请求以及一个指向下一个处理者的引用。具体处理者Concrete Handler: 是抽象处理者的子类实现请求处理的方法。如果能够处理该请求则对其进行处理否则通过调用下一个处理者的方法将请求传递下去。客户端Client: 创建责任链并提交请求到链上的第一个处理者。
Java代码示例
// 抽象处理者
public abstract class Handler {protected Handler nextHandler;public void setNext(Handler handler) {this.nextHandler handler;}// 处理请求的方法public abstract void handleRequest(int request);
}// 具体处理者A
public class ConcreteHandlerA extends Handler {Overridepublic void handleRequest(int request) {if (request 10) {System.out.println(ConcreteHandlerA handled the request: request);} else if (nextHandler ! null) {nextHandler.handleRequest(request);} else {System.out.println(Request not handled);}}
}// 具体处理者B
public class ConcreteHandlerB extends Handler {Overridepublic void handleRequest(int request) {if (request 10 request 20) {System.out.println(ConcreteHandlerB handled the request: request);} else if (nextHandler ! null) {nextHandler.handleRequest(request);} else {System.out.println(Request not handled);}}
}// 客户端使用示例
public class Client {public static void main(String[] args) {Handler handlerA new ConcreteHandlerA();Handler handlerB new ConcreteHandlerB();// 构建责任链handlerA.setNext(handlerB);// 提交请求handlerA.handleRequest(5); // ConcreteHandlerA handles it.handlerA.handleRequest(15); // ConcreteHandlerB handles it.handlerA.handleRequest(25); // No one handles it.}
}想象你正在为一家公司构建一个请假申请审批系统。部门经理、人事主管和CEO都可以审批员工的请假申请。当员工提交申请时它首先到达部门经理处如果经理有权批准这个天数的假期则直接处理否则把申请转交给人事主管以此类推。在这个例子中部门经理、人事主管和CEO就形成了一个“责任链”每个环节都是一个处理者他们按照一定的顺序处理请求直到找到合适的审批者为止。 应用
权限系统不同级别的用户具有不同的权限请求经过多个角色检查直到找到有权处理的角色为止。日志记录器按级别过滤日志低级别的处理器不能处理的消息会自动传递给高级别的处理器。企业审批流程每一级审批人是一个处理者根据规则逐级审批或者转交下一级审批。
适用性
请求处理者顺序不确定或动态可变的情况。一个请求可能由多个对象中的任意一个对象处理并且希望简化客户端代码使其不必明确指定处理请求的对象。需要避免请求发送者与接收者之间的紧耦合使得系统易于扩展。