责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象来处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。在责任链模式中,请求沿着一条链传递,直到有一个对象处理它为止。
在责任链模式中,通常有一个抽象处理者(Handler)类,它定义了一个处理请求的接口,并且包含一个指向下一个处理者的引用。每个具体处理者(ConcreteHandler)类实现了处理请求的方法,并且决定是否将请求传递给下一个处理者。文章源自新逸网络-https://www.xinac.net/9361.html
下面是一个简单的 Java 实现责任链模式的示例:文章源自新逸网络-https://www.xinac.net/9361.html
// 抽象处理者
abstract class Handler {
protected Handler successor; // 后继处理者
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(int request);
}
// 具体处理者A
class ConcreteHandlerA extends Handler {
public void handleRequest(int request) {
if (request >= 0 && request < 10) {
System.out.println("ConcreteHandlerA 处理请求 " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
// 具体处理者B
class ConcreteHandlerB extends Handler {
public void handleRequest(int request) {
if (request >= 10 && request < 20) {
System.out.println("ConcreteHandlerB 处理请求 " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
// 具体处理者C
class ConcreteHandlerC extends Handler {
public void handleRequest(int request) {
if (request >= 20 && request < 30) {
System.out.println("ConcreteHandlerC 处理请求 " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
Handler handlerC = new ConcreteHandlerC();
handlerA.setSuccessor(handlerB);
handlerB.setSuccessor(handlerC);
int[] requests = {5, 15, 25, 35};
for (int request : requests) {
handlerA.handleRequest(request);
}
}
}在上面的示例中,抽象处理者类定义了一个 `setSuccessor()` 方法来设置后继处理者,以及一个抽象的 `handleRequest()` 方法来处理请求。具体处理者类实现了 `handleRequest()` 方法,并且判断当前处理者是否能够处理该请求,如果不能则将请求传递给后继处理者。客户端通过链式设置处理者的后继关系,并且将请求发送给第一个处理者来开始处理请求。文章源自新逸网络-https://www.xinac.net/9361.html
责任链模式的优点是将请求和处理分离,降低了系统的耦合度,同时增加了系统的灵活性和可扩展性。但是需要注意的是,由于每个请求都需要在责任链中传递,因此会有一定的性能损失。文章源自新逸网络-https://www.xinac.net/9361.html 文章源自新逸网络-https://www.xinac.net/9361.html










评论