【HeadFirst设计模式】8.模板方法模式
模板方法
定義:
在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使用得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。
?
策略模式:
定義一個算法家族,并讓這些算法可以互換。正因為每一個算法都被封裝起來了,所以客戶可以輕易地使用不同的算法。
?
好萊塢原則:
別調用我們,我們會調用你。(依賴抽象)
與依賴倒置原則:
避免使用具體類,而多使用抽象
?
用模版方法來做排序(用非繼承的方式實現模板方法):
在Arrays中提供了sort的靜態(tài)方法,sort要求傳進的是一個數組。
這里的sort是一個模板方法,但是它并不是通過繼承來實現的,而是將該模樣方法中所封裝的算法的約束轉移至數組中。
也就是說,被傳進來的數組中的對象必須實現Comparable接口,否則sort無法對數組進行排序。
sort并不關心Comparable的具體行為,只要能提供sort排序所需要的接口即可。
?
要點:
模板方法定義了算法的步驟,把這些步驟的實現延遲到子類。
模板方法模式為我們的提供了一種代碼復用的重要技巧。
模板方法的抽象類可以定義具體方法、抽象方法和鉤子。
抽象方法由子類實現。
鉤子是一種方法,它在抽象類中不做事,或者只做默認的事情,子類可以選擇要不要去覆蓋它。
為了防止子類改變模板方法中的算法,我們可以將模板方法聲明為final。
好萊塢原則告訴我們,將決策權放在高層模塊中,以便決定如何以及何時調用低層模塊。
你將在真實世界代碼中看到模版方法模式的許多變體,不要期待它們全部都是一眼就可以被你認出的。
策略模式和模板方法模式都封裝衍,一個用組合,一個用繼承。
工廠方法是模式方法的一種特殊版本。
OO原則備忘:
封裝變化
多用組合,少用繼承
針對接口編程,不針對實現編程
為交互對象之間的松耦合設計而努力
類應該對擴展開放,對修改封閉
依賴抽象,不要依賴具體類
只和朋友談
別找我,我會找你
?
轉載于:https://www.cnblogs.com/laizhd/p/3631940.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【HeadFirst设计模式】8.模板方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python异常处理实例
- 下一篇: pureMVC介绍及学习