责任链模式 java代码
时间: 2023-10-22 07:13:11 浏览: 38
以下是一个简单的责任链模式的 Java 代码示例:
```java
// 定义一个处理请求的接口
interface Handler {
void setNextHandler(Handler handler);
void handleRequest(Request request);
}
// 具体的处理者类A
class HandlerA implements Handler {
private Handler nextHandler;
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
public void handleRequest(Request request) {
if (request.getType() == RequestType.TYPE_A) {
System.out.println("HandlerA handles request " + request.getName());
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
} else {
System.out.println("No handler available to handle request " + request.getName());
}
}
}
// 具体的处理者类B
class HandlerB implements Handler {
private Handler nextHandler;
public void setNextHandler(Handler handler) {
this.nextHandler = handler;
}
public void handleRequest(Request request) {
if (request.getType() == RequestType.TYPE_B) {
System.out.println("HandlerB handles request " + request.getName());
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
} else {
System.out.println("No handler available to handle request " + request.getName());
}
}
}
// 定义一个请求类
class Request {
private String name;
private RequestType type;
public Request(String name, RequestType type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public RequestType getType() {
return type;
}
}
// 定义请求类型
enum RequestType {
TYPE_A, TYPE_B
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Handler handlerA = new HandlerA();
Handler handlerB = new HandlerB();
// 设置责任链
handlerA.setNextHandler(handlerB);
Request request1 = new Request("Request1", RequestType.TYPE_A);
Request request2 = new Request("Request2", RequestType.TYPE_B);
Request request3 = new Request("Request3", RequestType.TYPE_C);
// 处理请求
handlerA.handleRequest(request1);
handlerA.handleRequest(request2);
handlerA.handleRequest(request3);
}
}
```
在上面的示例中,我们定义了一个处理请求的接口 `Handler`,并且实现了两个具体的处理者类 `HandlerA` 和 `HandlerB`。然后我们定义了一个请求类 `Request` 和请求类型 `RequestType`。最后,在客户端代码中,我们创建了两个处理者对象,并设置它们的责任链关系。然后我们创建了三个不同类型的请求,并将它们分别传递给处理者对象,处理者对象会根据请求类型来判断是否能够处理请求,如果不能处理则将请求传递给下一个处理者。