职责链模式(Chain of Resposiblity) :使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到又一个对象处理它为止。
PS:通俗的讲是一个实体或者变量进行类之间的传递,判断类(变量)的特征key字段,直到找到能处理这个对象的类进行处理为止。缺点是也有可能遍历了整条链找不到任何一个能处理的类。
主方法
public class main {
public static void main(String[] args) {
Handler h1 = new HandlerImpl1();
Handler h2 = new HandlerImpl2();
Handler h3 = new HandlerImpl3();
//声明责任传承关系
h1.setSuccessor(h2);
h2.setSuccessor(h3);
int[] requests = new int[]{2, 5, 14, 22, 18, 3, 27, 20};
for (int request : requests) {
h1.HandleRequest(request);
}
}
}
抽象类
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {//设置继任者
this.successor = successor;
}
public abstract void HandleRequest(int request);
}
继任者1~3
public class HandlerImpl1 extends Handler {
public void HandleRequest(int request) {
if (request >= 0 && request < 10) {
System.out.println(String.format("{%s}处理请求{%d}", getClass().getName(), request));
} else if (successor != null) {
successor.HandleRequest(request);
}
}
}
public class HandlerImpl2 extends Handler {
public void HandleRequest(int request) {
if (request >= 10 && request < 20) {
System.out.println(String.format("{%s}处理请求{%d}", getClass().getName(), request));
} else if (successor != null) {
successor.HandleRequest(request);
}
}
}
public class HandlerImpl3 extends Handler {
public void HandleRequest(int request) {
if (request >= 20 && request < 30) {
System.out.println(String.format("{%s}处理请求{%d}", getClass().getName(), request));
} else if (successor != null) {
successor.HandleRequest(request);
}
}
}