設計模式學習筆記(八)模板方法模式

定義

模板方法模式在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中.模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟.

要點

  • 模板方法的抽象類可以定義具體方法,抽象方法鉤子.
  • 抽象方法由子類實現(xiàn).
  • 鉤子是一種方法,它在抽象類中不做事或者只做默認的事,子類可以選擇要不要去覆蓋它.
  • 為了防止子類改變模板方法中的算法,在JAVA中可以將模板方法聲明為final.
  • 高層和底層組件避免出現(xiàn)明顯的環(huán)狀依賴.
  • 策略模式模板算法模式都封裝算法,一個用組合,一個用繼承.
  • 工廠方法模板方法的一種特殊版本.

個人理解

我們可以利用模板方法模式,將對象的共同點寫到抽象類的具體實現(xiàn)中去,同時JAVA中因為有final這個關鍵字,子類也無法覆寫抽象類的方法,這就保護了算法執(zhí)行的順序,同時也保證了抽象類中的具體方法不會被子類所篡改.這個final很騷啊,有些小小的o(一︿一+)o.子類將繼承得到的需要改變的方法進行覆寫,就可以完成自己的相應的功能,這與策略模式的組合不同,這里使用的是繼承,突然有點突發(fā)奇想,如果我們使用鉤子來對行為進行組合或者選擇呢?

學到這個模式,我記憶最為深刻的就是這個hook(鉤子)了,以前也接觸過,也明白他在做什么,但并不清楚他的定義是什么.我們什么時候該使用鉤子,什么時候該使用抽象方法呢?書中是這么回答的:當你的子類必須提供算法中的某個方法或者步驟的實現(xiàn)時,就使用抽象方法.如果算法的這個部分是可選擇的,就用鉤子.如果是鉤子的話,子類可以選擇實現(xiàn)這個鉤子,但并不強制這么做.我們可以通過這個鉤子來改變內部代碼的選擇執(zhí)行,甚至可以通過改變這個鉤子的代碼來完全改變抽象類方法的執(zhí)行結果!這是我感受最為頗深的一點.

抽象類的方法多少內容需要自己去調節(jié)優(yōu)化到一個合適的程度,如果某些步驟是可選的,所以我們可以將這些方法實現(xiàn)成hook,而不是實現(xiàn)成抽象方法,這樣可以讓抽象類的子類負荷減輕.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容