java责任链设计模式
时间: 2023-11-06 07:05:31 浏览: 75
Java责任链设计模式是一种行为型设计模式,它允许你将请求沿着处理者链进行发送,直到其中一个处理者对其进行处理。责任链模式中,每个处理者都有一个对下一个处理者的引用,形成一个链条。当请求进入责任链时,从链头开始遍历,直到找到能够处理该请求的处理者为止。责任链模式可以有效地解耦请求发送者和接收者之间的关系,同时也可以动态地组合职责对象,灵活地分配职责对象。在Java中,责任链模式常用于过滤器、拦截器等场景。
相关问题
java 责任链设计模式
责任链设计模式是一种行为型设计模式,它通过将请求的发送者和接收者解耦,使多个对象都有机会处理该请求。在责任链模式中,每个对象都包含一个对下一个对象的引用,形成一个链条。当请求从链条的头部进入时,每个对象依次判断是否能够处理该请求,如果能够处理则处理,否则将请求传递给下一个对象。
在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()` 方法,责任链会按照定义的处理逻辑逐个处理请求。
给我写一个demo,用于解释java责任链设计模式
A:
好的,让我们来写一个简单的demo来解释Java责任链设计模式。责任链是一种行为设计模式,它允许您创建一个由多个对象组成的链,每个对象都能够处理请求,如果一个对象不能处理请求,则会将它传递到下一个对象,直到找到能够处理该请求的对象。
我们来模拟一个简单的审批流程,假设我们有三个处理者:经理、部门主管和CEO,每个处理者都能够审批请求,但只有经理可以审批低于10000元的请求,部门主管可以审批低于50000元的请求,而CEO可以处理所有请求。
我们可以使用责任链模式来实现这个流程。
我们先来看 Handler 接口:
```
public interface Handler {
public void setNextHandler(Handler nextHandler);
public void processRequest(double amount);
}
```
我们定义了一个 Handler 接口,它包含两个方法:
- setNextHandler: 设置下一个处理者。
- processRequest: 处理请求。
接下来我们来实现具体的处理者类。
```
public class ManagerHandler implements Handler {
private Handler nextHandler;
@Override
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
@Override
public void processRequest(double amount) {
if (amount < 10000) {
System.out.println("经理审批通过");
} else {
nextHandler.processRequest(amount);
}
}
}
public class DirectorHandler implements Handler {
private Handler nextHandler;
@Override
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
@Override
public void processRequest(double amount) {
if (amount < 50000) {
System.out.println("部门主管审批通过");
} else {
nextHandler.processRequest(amount);
}
}
}
public class CEOHandler implements Handler {
private Handler nextHandler;
@Override
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
@Override
public void processRequest(double amount) {
System.out.println("CEO审批通过");
}
}
```
我们实现了三个处理者类: ManagerHandler、DirectorHandler和CEOHandler。
它们都实现 Handler 接口,并且覆写了 setNextHandler 和 processRequest 方法。
假设我们要处理一个申请金额且金额为 60000 元,我们可以通过以下方式构建责任链:
```
Handler managerHandler = new ManagerHandler();
Handler directorHandler = new DirectorHandler();
Handler ceoHandler = new CEOHandler();
managerHandler.setNextHandler(directorHandler);
directorHandler.setNextHandler(ceoHandler);
managerHandler.processRequest(60000);
```
以上代码中,我们首先创建了三个处理者,然后使用 setNextHandler 方法构建了责任链。
最后,我们调用 managerHandler 的 processRequest 方法,并将申请金额传递给该方法,它将首先检查该金额是否小于10000,如果是,则将请求处理,否则将请求传递到下一个处理者(即 directorHandler)。
如果 directorHandler 不能处理请求,它将请求传递给 ceoHandler,最终 CEOHandler 将处理该请求。
这就是责任链模式的基本思想。它允许我们将请求发送到链的顶部,并从顶部开始逐个测试处理者,直到我们找到能够处理请求的处理者。
希望这个demo可以帮助你理解Java中的责任链设计模式。