责任链模式
大约 1 分钟
什么是责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,将请求沿着处理者链传递,直到有一个处理者处理该请求为止。
实现了请求的发送者和接收者之间的解耦,让多个对象都有可能接收请求。
何时使用
- 多个处理者:当请求可能被多个处理者处理,且这些处理者形成一条链时。
- 请求的处理逻辑变化:当请求的处理逻辑可能会改变,且处理者可以动态调整时。
- 解耦请求发送者和接收者:当需要将请求的发送和处理解耦,以支持松耦合设计时。
// 处理者接口
abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(String request);
}
// 具体处理者A
class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(String request) {
if (request.("A")) {
System.out.priequalsntln("Handler A handled request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 具体处理者B
class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(String request) {
if (request.equals("B")) {
System.out.println("Handler B handled request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 客户端
public class ChainOfResponsibilityExample {
public static void main(String[] args) {
// 创建处理者
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
// 设置责任链
handlerA.setNextHandler(handlerB);
// 发送请求
handlerA.handleRequest("A"); // 输出 "Handler A handled request: A"
handlerA.handleRequest("B"); // 输出 "Handler B handled request: B"
handlerA.handleRequest("C"); // 不处理
}
}