写一个责任链模式 java
时间: 2024-05-27 15:14:59 浏览: 11
责任链模式是一种行为型设计模式,它允许将多个对象组成一条链,并按照顺序逐个处理请求,直到请求被处理或者到达链的末端。在责任链模式中,每个对象都有机会处理请求,但是只有能够处理该请求的对象才会处理它。
下面是一个简单的责任链模式的Java代码示例:
// 抽象处理器类
public abstract class Handler {
private Handler nextHandler;
public Handler getNextHandler() {
return nextHandler;
}
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(Request request);
}
// 具体处理器类A
public class ConcreteHandlerA extends Handler {
public void handleRequest(Request request) {
if (request.getType() == RequestType.TYPE_A) {
// 处理请求
System.out.println("ConcreteHandlerA 处理了请求");
} else if (getNextHandler() != null) {
// 交给下一个处理器处理
getNextHandler().handleRequest(request);
} else {
// 到达链的末端,无法处理请求
System.out.println("请求无法处理");
}
}
}
// 具体处理器类B
public class ConcreteHandlerB extends Handler {
public void handleRequest(Request request) {
if (request.getType() == RequestType.TYPE_B) {
// 处理请求
System.out.println("ConcreteHandlerB 处理了请求");
} else if (getNextHandler() != null) {
// 交给下一个处理器处理
getNextHandler().handleRequest(request);
} else {
// 到达链的末端,无法处理请求
System.out.println("请求无法处理");
}
}
}
// 请求类
public class Request {
private RequestType type;
public Request(RequestType type) {
this.type = type;
}
public RequestType getType() {
return type;
}
}
// 请求类型枚举类
public enum RequestType {
TYPE_A,
TYPE_B
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 创建责任链
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
handlerA.setNextHandler(handlerB);
// 创建请求
Request requestA = new Request(RequestType.TYPE_A);
Request requestB = new Request(RequestType.TYPE_B);
// 处理请求
handlerA.handleRequest(requestA);
handlerA.handleRequest(requestB);
}
}
在上面的代码中,抽象处理器类Handler定义了一个getNextHandler方法和一个setNextHandler方法,用于设置和获取下一个处理器。具体处理器类ConcreteHandlerA和ConcreteHandlerB分别实现了handleRequest方法,用于处理不同类型的请求。客户端代码使用责任链模式处理两个不同类型的请求,每个请求依次经过责任链上的处理器处理,直到被处理或者到达链的末端。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)