文章目录
1.概念
1.1 什么是责任链模式
1.2 优点与缺点
优点:
1.降低请求的发送者和接收者之间的耦合关系。
2.请求的发送者不需要知道链中的具体结构。
3.可以动态地添加或修改处理者。
缺点:
1.请求可能在链中得不到处理,需要有机制保证请求被正确处理。
2.系统性能问题,因为请求可能需要在链中传递多次。
2.实现方式
// 抽象处理者接口
public interface Handler {
void setNext(Handler handler);
void handleRequest(int request);
}
// 具体处理者实现
public class ConcreteHandler1 implements Handler {
private Handler nextHandler;
public void setNext(Handler handler) {
this.nextHandler = handler;
}
public void handleRequest(int request) {
if (request >= 0 && request < 10) {
System.out.println("ConcreteHandler1 handled the request " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
public class ConcreteHandler2 implements Handler {
private Handler nextHandler;
public void setNext(Handler handler) {
this.nextHandler = handler;
}
public void handleRequest(int request) {
if (request >= 10 && request < 20) {
System.out.println("ConcreteHandler2 handled the request " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
public class ConcreteHandler3 implements Handler {
private Handler nextHandler;
public void setNext(Handler handler) {
this.nextHandler = handler;
}
public void handleRequest(int request) {
if (request >= 20 && request < 30) {
System.out.println("ConcreteHandler3 handled the request " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
handler1.setNext(handler2);
handler2.setNext(handler3);
// 发送请求
handler1.handleRequest(5); // 应该由 ConcreteHandler1 处理
handler1.handleRequest(15); // 应该由 ConcreteHandler2 处理
handler1.handleRequest(25); // 应该由 ConcreteHandler3 处理
}
}