設計模式之---責任鏈模式

責任鏈模式,大家肯定都有聽說過,web應用上的tomcat的filter可以理解爲一個責任鏈模式,責任鏈模式就相當於一個處理鏈,一個對象從第一個處理對象開始,處理完之後傳到第二個,直到最後一個,而且處理對象的順序和數量可以任意改動。

責任鏈模式的定義:
     使多個對象都有機會處理請求,從而避免了請求的發送者和接受者之間的耦合關係,將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有對象處理它爲止。


使用場景:
  •      對個對象可以處理同一個請求,但具體哪個對象處理則在運行時動態決定  
  •      在請求處理者不明確的情況下向多個對象中的一個提交一個請求
  •      需要動態指定一組對象處理請求

UML圖:
  
     新建一個工程,目錄結構
     比如說構造一個抽象的領導者

public abstract class Leader {
       //上一級的領導處理者
       public Leader nextHanlder ;
      
       /**
       * 處理請求
       * */
       public final void handleRequest(int money){
             if(money <=limit()){
                  handle( money);
            } else{
                   if(null !=nextHanlder ){
                         nextHanlder.handle(money );
                  }
            }
      }

       public abstract int limit();
      
       public abstract void handle(int money);
}
在這個抽象的領導類裏面只做了兩件事。一是定義了兩個抽象接口方法來確定一個領導者應有的行爲和屬性,二是聲明看一個處理請求的方法來確定當前領導是否有能力處理報賬請求,如果沒有這權限,則將該請求轉發給上級領導處理。

然後是領導的實現,這裏只貼一個

/**
 * 老闆
 * */
public class Leader1 extends Leader{

       @Override
       public int limit() {
             // TODO Auto-generated method stub
             return 10000;
      }

       @Override
       public void handle(int money) {
             // TODO Auto-generated method stub
            System. out.println("老闆批覆報銷" +money +"元" );
      }
      
}

客戶端

public class client {
       public static void main(String[] args) {
             //構造領導者對象
            Leader1 liLeader1=new Leader1();
            Leader2 liLeader2=new Leader2();
            Leader3 liLeader3=new Leader3();
            
             liLeader2.nextHanlder =liLeader3 ;
             liLeader3.nextHanlder =liLeader1 ;
            
             liLeader2.handleRequest(500);
      }
}

運行結果這裏就不貼了,這知識一個簡單的責任鏈模式的實現。但是在日常應用裏很少有純的責任鏈模式,一般都有一些變動,比如像鏈表一樣,從單向條鏈表--》雙向鏈表-》樹-》圖類似的發展結構。這個只是一個指導思想而已,在安卓中責任鏈模式的實現比較典型的就是對觸摸事件的分發處理。
發佈了58 篇原創文章 · 獲贊 20 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章