責任鏈設計模式

一、責任鏈模式是一種對象的行爲模式java

  • 在責任鏈模式裏,不少對象由每個對象對其下家的引用而鏈接起來造成一條鏈
  • 請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求
  • 發出這個請求的客戶端並不知道鏈上的哪個對象最終處理這個請求
  • 系統能夠在不影響客戶端的狀況下動態地從新組織和分配責任

二、責任鏈模式的結構tomcat

  • 抽象處理者角色
public abstract class Handler {
    
    /**
     * 持有後繼的責任對象
     */
    protected Handler successor;
    /**
     * 示意處理請求的方法,雖然這個示意方法是沒有傳入參數的
     * 但實際是能夠傳入參數的,根據具體須要來選擇是否傳遞參數
     */
    public abstract void handleRequest();
    /**
     * 取值方法
     */
    public Handler getSuccessor() {
        return successor;
    }
    /**
     * 賦值方法,設置後繼的責任對象
     */
    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }
    
}
  • 具體處理者角色
public class ConcreteHandler extends Handler {
    /**
     * 處理方法,調用此方法處理請求
     */
    @Override
    public void handleRequest() {
        /**
         * 判斷是否有後繼的責任對象
         * 若是有,就轉發請求給後繼的責任對象
         * 若是沒有,則處理請求
         */
        if(getSuccessor() != null)
        {            
            System.out.println("放過請求");
            getSuccessor().handleRequest();            
        }else
        {            
            System.out.println("處理請求");
        }
    }

}
  • 客戶端類
public class Client {

    public static void main(String[] args) {
        //組裝責任鏈
        Handler handler1 = new ConcreteHandler();
        Handler handler2 = new ConcreteHandler();
        handler1.setSuccessor(handler2);
        //提交請求
        handler1.handleRequest();
    }

}

三、純的與不純的責任鏈模式ide

  • 一個純的責任鏈模式裏面,一個請求必須被某一個處理者對象所接收
  • 在一個不純的責任鏈模式裏面,一個請求能夠最終不被任何接收端對象所接收

四、責任鏈模式在Tomcat中的應用(詳見tomcat servlet 容器一文)this

相關文章
相關標籤/搜索