给我写个责任链模式
责任链模式是一种行为型设计模式,它将请求从一个对象传递到另一个对象,直到找到能够处理请求的对象为止。责任链模式可以避免请求发送者与接收者之间的耦合关系,从而使多个对象都有机会处理请求,增加了系统的灵活性和可扩展性。
在责任链模式中,通常会定义一个抽象处理者角色和若干个具体处理者角色。抽象处理者角色定义了一个处理请求的接口,并声明了一个后继处理者的引用。具体处理者角色实现了抽象处理者角色定义的接口,并负责处理请求。如果自己不能处理请求,就将请求传递给后继处理者,直到有一个处理者可以处理该请求为止。
下面是一个简单的责任链模式示例代码:
// 抽象处理者角色
public abstract class Handler {
protected Handler successor; // 后继处理者
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(int request); // 处理请求的抽象方法
}
// 具体处理者角色A
public class ConcreteHandlerA extends Handler {
public void handleRequest(int request) {
if (request < 10) {
System.out.println("ConcreteHandlerA 处理请求 " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
// 具体处理者角色B
public 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
public class ConcreteHandlerC extends Handler {
public void handleRequest(int request) {
if (request >= 20) {
System.out.println("ConcreteHandlerC 处理请求 " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandlerA();
Handler handler2 = new ConcreteHandlerB();
Handler handler3 = new ConcreteHandlerC();
handler1.setSuccessor(handler2);
handler2.setSuccessor(handler3);
int[] requests = {2, 5, 14, 22, 18};
for (int request : requests) {
handler1.handleRequest(request);
}
}
}
在上面的代码中,抽象处理者角色定义了一个处理请求的抽象方法,并声明了一个后继处理者的引用。具体处理者角色实现了抽象处理者角色定义的接口,并负责处理请求,如果自己不能处理请求,就将请求传递给后继处理者,直到有一个处理者可以处理该请求为止。客户端代码通过设置处理者之间的关系,并将请求传递给第一个处理者来启动责任链模式的执行
原文地址: https://www.cveoy.top/t/topic/e9xG 著作权归作者所有。请勿转载和采集!