優勢: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(總經理) -- 依據各自權限斷定請求事件,無權限則轉給上級 */