設計模式(十五):職責鏈模式
阿新 • • 發佈:2019-01-10
優點:
① 職責鏈可簡化物件的相互連線,僅需要保持一個指向上級的路線
② 分派職責時,有更多的靈活性,可以通過在執行時刻對該鏈進行動態的增加或修改,來增加或改變那些處理請求的那些職責。
缺點:
① 不能保證請求一定被接收。既然一個請求沒有明確的接收者,那麼就不能保證它一定會被處理,該請求可能一直到鏈的末端都得不到處理。
② 系統性能將受到一定影響,而且在進行程式碼除錯時不太方便;可能會造成迴圈呼叫。
適用範圍:
有多個的物件可以處理一個請求,哪個物件處理該請求執行時刻自動確定。
想在不明確指定接收者的情況下,向多個物件中的一個提交一個請求。
客戶端:
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(總經理) -- 依據各自許可權判定請求事件,無許可權則轉給上級 */