1. 程式人生 > >設計模式(十五):職責鏈模式

設計模式(十五):職責鏈模式

優點:

  ① 職責鏈可簡化物件的相互連線,僅需要保持一個指向上級的路線

  ② 分派職責時,有更多的靈活性,可以通過在執行時刻對該鏈進行動態的增加或修改,來增加或改變那些處理請求的那些職責。

缺點:

  ① 不能保證請求一定被接收。既然一個請求沒有明確的接收者,那麼就不能保證它一定會被處理,該請求可能一直到鏈的末端都得不到處理。

  ② 系統性能將受到一定影響,而且在進行程式碼除錯時不太方便;可能會造成迴圈呼叫。

適用範圍:

     有多個的物件可以處理一個請求,哪個物件處理該請求執行時刻自動確定。

  想在不明確指定接收者的情況下,向多個物件中的一個提交一個請求。

客戶端: 

  CommonManager jl = new CommonManager("經理");
  MajorManager zj = new MajorManager("總監");
  GeneralManager zjl = new GeneralManager("總經理");

  //設定上級
  jl.setSuperior(zj);
  zj.setSuperior(zjl);

  //請求事件
  RequestEvent r = new RequestEvent();
  r.setRequestType("請假"); //型別
  r.setRequestContent("請病假(天)"); //內容
  r.setNum(15); //數量

  //所有的申請都從直屬經理開始,但實際處理人未知
  jl.applyRequest(r);  //若經理無許可權,會自動上交,直到出結果

  //列印結果:總經理批示:請病假(天),數量:15,被批准

        /**
         * RequestEvent (請求事件-型別、內容、數量)
         *
         * Manager(管理者,包含本級管理者和上級管理者屬性,關鍵方法-設定本級管理者的上級方法,處理申請請求方法)
         * CommonManager (經理)  MajorManager (總監)  MajorManager(總經理) -- 依據各自許可權判定請求事件,無許可權則轉給上級
         */