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

優勢:app

  ① 職責鏈可簡化對象的相互鏈接,僅須要保持一個指向上級的路線性能

  ② 分派職責時,有更多的靈活性,能夠經過在運行時刻對該鏈進行動態的增長或修改,來增長或改變那些處理請求的那些職責。spa

缺點:調試

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

  ② 系統性能將受到必定影響,並且在進行代碼調試時不太方便;可能會形成循環調用。對象

適用範圍:blog

     有多個的對象能夠處理一個請求,哪一個對象處理該請求運行時刻自動肯定。事件

  想在不明確指定接收者的狀況下,向多個對象中的一個提交一個請求。io

客戶端: class

  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(總經理) -- 依據各自權限斷定請求事件,無權限則轉給上級
         */
相關文章
相關標籤/搜索