设计模式-责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着对象链传递,直到有一个对象能够处理它为止。这种模式避免了请求的发送者和接收者之间的紧耦合关系,使得新增或修改处理请求的类更容易,同时提供了更好的灵活性和可扩展性。
代码结构图:
代码示例:
/**
* 处理器接口
*/
public abstract class Handler {
protected Handler successor;
/**
* 设置继承者
*/
public void setSuccessor(Handler successor){
this.successor = successor;
}
public abstract void handleRequest(int request);
}
/**
* 具体处理类
* 处理请求数0~10之间的数
*/
public class ConcreteHandler1 extends Handler{
@Override
public void handleRequest(int request) {
if (request >= 0 && request <= 10){
System.out.println("具体实现1类 处理请求" + request);
}else{
// 转给下一位处理
successor.handleRequest(request);
}
}
}
/**
* 具体处理类
* 处理10~20之间的数
*/
public class ConcreteHandler2 extends Handler{
@Override
public void handleRequest(int request) {
if (request >= 10 && request <= 20){
System.out.println("具体实现2类 处理请求" + request);
}else{
// 转给下一位处理
System.out.println("当前数值未能满足所有处理条件 处理请求" + request);
}
}
}
/**
* 责任链模式客户端
*/
public class ResponsibilityDemo {
public static void main(String[] args) {
// 设置责任链
ConcreteHandler1 concreteHandler1 = new ConcreteHandler1();
ConcreteHandler2 concreteHandler2 = new ConcreteHandler2();
concreteHandler1.setSuccessor(concreteHandler2);
// 定义数组 循环模拟测试
int [] requests = {2, 14, 22, 2, 44};
for (int i = 0; i < requests.length; i++) {
concreteHandler1.handleRequest(requests[i]);
}
}
}
打印结果:
Connected to the target VM, address: '127.0.0.1:19554', transport: 'socket'
具体实现1类 处理请求2
具体实现2类 处理请求14
当前数值未能满足所有处理条件 处理请求22
具体实现1类 处理请求2
当前数值未能满足所有处理条件 处理请求44
Disconnected from the target VM, address: '127.0.0.1:19554', transport: 'socket'