java 责任链设计模式
时间: 2023-10-13 22:05:11 浏览: 92
java 设计模式.pdf
责任链设计模式是一种行为型设计模式,它通过将请求的发送者和接收者解耦,使多个对象都有机会处理该请求。在责任链模式中,每个对象都包含一个对下一个对象的引用,形成一个链条。当请求从链条的头部进入时,每个对象依次判断是否能够处理该请求,如果能够处理则处理,否则将请求传递给下一个对象。
在Java中,可以使用责任链模式来实现一些具有类似处理流程的场景,例如日志记录、权限校验、异常处理等。
以下是一个简单的Java代码示例,用于演示责任链设计模式的实现:
```java
// 定义一个抽象处理器
abstract class Handler {
protected Handler successor; // 后继处理器
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(Request request);
}
// 具体处理器A
class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getLevel() <= 10) { // 根据请求的级别判断是否能够处理
System.out.println("ConcreteHandlerA 处理了请求:" + request.getContent());
} else if (successor != null) {
successor.handleRequest(request); // 不能处理则传递给下一个处理器
}
}
}
// 具体处理器B
class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getLevel() > 10 && request.getLevel() <= 20) {
System.out.println("ConcreteHandlerB 处理了请求:" + request.getContent());
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
// 请求类
class Request {
private int level; // 请求级别
private String content; // 请求内容
public Request(int level, String content) {
this.level = level;
this.content = content;
}
public int getLevel() {
return level;
}
public String getContent() {
return content;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
handlerA.setSuccessor(handlerB);
Request request1 = new Request(5, "低级请求");
Request request2 = new Request(15, "中级请求");
Request request3 = new Request(25, "高级请求");
handlerA.handleRequest(request1);
handlerA.handleRequest(request2);
handlerA.handleRequest(request3);
}
}
```
输出结果:
```
ConcreteHandlerA 处理了请求:低级请求
ConcreteHandlerB 处理了请求:中级请求
```
在上述代码中,`Handler` 是抽象处理器类,`ConcreteHandlerA` 和 `ConcreteHandlerB` 是具体处理器类,`Request` 是请求类。在客户端代码中,我们创建了两个具体处理器对象,并通过 `setSuccessor()` 方法将它们链接在一起形成一个责任链。最后,我们创建了三个请求对象,依次调用 `handleRequest()` 方法,责任链会按照定义的处理逻辑逐个处理请求。
阅读全文