? ? ? ?责任链模式(Chain of Responsibility Pattern)是属于行为型的设计模式,它通过将请求沿着对象链传递直到全部的对象处理完为止,使得每个接收者对象都有机会处理请求。这种模式允许对请求的处理解耦,并且让多个对象可以参与处理过程。
setNext(Handler)
?用于设置下一个处理器,以及?handleRequest(Request)
?用于处理请求。责任链java实现示例代码:
// 抽象处理器
public abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
public abstract void handleRequest(int request);
}
// 具体处理器A
public class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(int request) {
if (request < 10) { // 处理小于10的请求
System.out.println("ConcreteHandlerA handled request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request); // 将大于等于10的请求转发给下一个处理器
}
}
}
// 具体处理器B
public class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(int request) {
if (request < 20 && nextHandler == null) { // 处理10到19的请求
System.out.println("ConcreteHandlerB handled request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request); // 将大于等于20的请求转发给下一个处理器
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
handlerA.setNextHandler(handlerB);
handlerA.handleRequest(5); // 输出 "ConcreteHandlerA handled request: 5"
handlerA.handleRequest(15); // 输出 "ConcreteHandlerB handled request: 15"
handlerA.handleRequest(30); // 因为没有后续处理器,所以不会有任何输出
}
}
说明:在上面的代码中当客户端发起一个请求时,请求首先被?ConcreteHandlerA
?处理。如果请求值小于10,由?ConcreteHandlerA
?直接处理;否则,请求会被转发给?ConcreteHandlerB
。若请求值仍然不在?ConcreteHandlerB
?的处理范围内且没有后续处理器,请求将不再继续传递。