責任鍊設計模式,是行為型設計模式的巅峰之作。
現在有一個場景,請假申請。請假時間的長短,需要不同級别的上司才能審批。
萬物皆對象嘛,請假需要工号、姓名、原因、時長、結果等等,那我們來定義一個請假的類。其實其就是一個上下文環境(context),儲存業務進行中參數-----中間結果-----最終結果。行為型設計模式重用的标配,把行為轉移。
請假需要new一個執行個體:
第一種方式,審批邏輯都寫在上端,直接就是需求翻譯,沒有任何加工,談不上什麼擴充,面向過程:
第二種方式,面向對象:封裝--繼承--多态,轉移業務邏輯,也隻是一個翻譯機,翻譯完+面向對象,其實完全沒有涉及加工沒有思考。
上司類s:
view code
下面進行邏輯的翻譯:
不要直接翻譯的邏輯,需要涉及,現在的場景分析是,1、權限範圍内,審批通過;2、權限範圍外,交給下一環節審批,寫的代碼又多了一個,指定洗衣環節,甩鍋大法開始。
首先定義一個抽象父類:
上司類需要繼承這個抽象類:
其他的上司類以此類推.....
調用的時候,隻需要找最低權限的人,去審批
以上,轉移了申請送出的邏輯,這次符合實際情況,有了自己的思考和設計在裡面。
甩鍋大法開始了,一樣,上司類需要實作抽象父類,不過在audit方法中稍作了改動
下面需要找上司審批了:
以上,把流暢環節邏輯從業務類轉移了。