模板方法中,有的方法是由超類實現的,有些方法是由子類處理的。需要子類處理的方法需要宣告為抽象方法。
模板方法定義了乙個演算法的框架,框架裡面有一些小的步驟,這些步驟既可以在超類中實現,也可以延遲到子類實現。這樣使得子類可以在不影響演算法結構情況下修改具體實現。
模板方法應宣告為final,以防止子類繼承時覆蓋。
在模板模式中使用鉤子
可以使用鉤子來影響父類中模板演算法的組合順序。方法是在模板方法中加入if語句,用鉤子函式的返回值作為轉移條件來控制某演算法是否要執行。然後鉤子函式提供預設值,可由子類選擇是否覆蓋父類的鉤子函式影響父類模板方法。
鉤子方法和抽象方法
當某個方法是子類必須實現的方法時,可以使用抽象方法。如果模板方法中的某步是可選的,需要子類決定其是否使用,可以使用鉤子。
好萊塢原則
高層呼叫底層元件,底層元件不要對高層元件依賴。
應用乙個自然的想法是stl庫中的容器。如list,map等,他們內部都有比較演算法,但通常你可以指定自己的比較方法供容器排序。
《Head first設計模式》學習筆記
開閉原則的意思是 對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的 實現乙個熱插拔的效果。簡言之,是為了使程式的擴充套件性好,易於維護和公升級。想要達到這樣的效果,我們需要使用介面和抽象類,後面的具體設計中我們會提到這點。黎克特制代換原則是物件導向設計的基本原則之一。黎克特制代...
headfirst設計模式
花了一周多一點的時間看完了headfirst的設計模式。看完之後有一種恍然大悟的感覺,仔細想想有覺得自己好像什麼也看懂。簡單說下對這本書的一點感悟吧,headfirst的書比較通俗易懂,之前看了四人幫的設計模式,看一半就有一種痛不欲生的感覺,自己水平有限,看不懂,也就沒在勉強自己了。對於模式其實簡單...
HeadFirst設計模式學習筆記02
執行時擴充套件,遠比編譯時繼承威力大。熟悉了裝飾的技巧,能夠在不改變任何底層 的情況下,給你的物件賦予新的職責。星巴茲starbuzz以擴張速度快聞名,準備更新訂單系統,以適應他們的飲料 要求。原先類的設計 現在想購買咖啡時,可以要求在其中加入各種調料,如蒸奶 steamed milk 豆漿 soy...