職責(zé)鏈模式(Chain of Resposiblity) :使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系。將這個(gè)對(duì)象連成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到又一個(gè)對(duì)象處理它為止。
PS:通俗的講是一個(gè)實(shí)體或者變量進(jìn)行類之間的傳遞,判斷類(變量)的特征key字段,直到找到能處理這個(gè)對(duì)象的類進(jìn)行處理為止。缺點(diǎn)是也有可能遍歷了整條鏈找不到任何一個(gè)能處理的類。
主方法
public class main {
public static void main(String[] args) {
Handler h1 = new HandlerImpl1();
Handler h2 = new HandlerImpl2();
Handler h3 = new HandlerImpl3();
//聲明責(zé)任傳承關(guān)系
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) {//設(shè)置繼任者
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}處理請(qǐng)求{%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}處理請(qǐng)求{%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}處理請(qǐng)求{%d}", getClass().getName(), request));
} else if (successor != null) {
successor.HandleRequest(request);
}
}
}