在Java中实现责任链模式可以通过创建一个抽象处理器(Handler)和具体处理器(ConcreteHandler)来完成。下面是一个简单的示例:
首先,我们定义一个抽象处理器(Handler):
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(Request request);
}
然后,我们创建具体的处理器类,它们将按照一定的顺序依次处理请求。每个处理器都可以选择将请求传递给下一个处理器或者自行处理请求。
public class ConcreteHandler1 extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getLevel() == 1) {
System.out.println("ConcreteHandler1 处理请求");
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
public class ConcreteHandler2 extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getLevel() == 2) {
System.out.println("ConcreteHandler2 处理请求");
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
public class ConcreteHandler3 extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getLevel() == 3) {
System.out.println("ConcreteHandler3 处理请求");
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
接下来,我们定义一个请求类(Request)来封装请求的信息:
public class Request {
private int level;
public Request(int level) {
this.level = level;
}
public int getLevel() {
return level;
}
}
现在,我们可以使用责任链模式来处理请求。在责任链中,请求将从第一个处理器开始,依次传递给下一个处理器,直到有一个处理器能够处理该请求或者请求到达责任链的末端。
public class Main {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
handler1.setSuccessor(handler2);
handler2.setSuccessor(handler3);
Request request1 = new Request(1);
Request request2 = new Request(2);
Request request3 = new Request(3);
handler1.handleRequest(request1);
handler1.handleRequest(request2);
handler1.handleRequest(request3);
}
}
输出结果:
ConcreteHandler1 处理请求
ConcreteHandler2 处理请求
ConcreteHandler3 处理请求
这个例子展示了责任链模式的实现。通过创建一个处理器链,并设置每个处理器的后继处理器,请求会依次经过处理器链中的处理器进行处理,直到找到能够处理该请求的处理器或者到达责任链的末端。