一:責任鏈模式定義(tomcat的啓動加載過程,攔截器)
使多個對象都有機會處理請求,從而避免了請求的發送者和接受者之間的耦合關係。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有對象處理它爲止
二:責任鏈模式的特點
純責任鏈模式:一個request必須被且只能被一個handle處理。不允許request不被處理,或者被多次處理。
不純:request可以不被處理,也可以被多次處理。
抽象處理者需要定義一個protected的後繼處理者(因爲需要被子類訪問到),每一個處理者在處理之前要設置好自己的後繼處理者,這樣當自己無法處理該請求的時候,轉交給後繼者,直至整個責任鏈的所有處理者都執行完畢。具體的處理需要final修飾,以保證整個的處理流程是不可以更改
三:責任鏈模式的實現
抽象處理者:public abstract class Approver {
protected Approver successor;
public Approver getSuccessor() {
return successor;
}
//設置後繼者
public void setSuccessor(Approver successor){
this.successor=successor;
}
//抽象請求處理方法
public abstract void processRequest(PurchaseRequest request);
}
具體處理者:public class VicePresident extends Approver {
@Override
public final void processRequest(int num) {
if(num>100){
System.out.println("自己處理的邏輯");
}
else{//無法處理就交給自己的後繼者
this.successor.processRequest(num); // 轉發請求
}
}
}
測試類:public class Client {
public static void main(String[] args) {
Approver director, vicePresident;
director = new Director();
vicePresident = new VicePresident();
// 創建責任鏈(必須在自身執行之前指定下一個執行者,否則自己執行失敗的時候會空指針)
director.setSuccessor(vicePresident);
// 創建一系列請求,全部交給責任鏈的第一個處理者處理,用戶不用關心該處理者是否能夠處理該請求。即內部的實現對用戶透明
director.processRequest(150);
director.processRequest(30);
}