模板方法定義
在乙個方法中定義乙個演算法骨架,而將一些步驟延遲到子類中,模板方
法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。
demo演示–泡茶和衝咖啡分析:
泡茶和衝咖啡都可以分成下面四個步驟:
再進一步,模板方法與鉤子在上乙個部分中,我們定義了乙個含有四個部分的演算法骨架,其中兩個部分交給子類去實現,另外兩個由基類實現。這樣做,對於基類來說,遮蔽了演算法的某些細節,而子類負責實現這些細節,從而將自己掛載到演算法當中去,而鉤子則能夠改變演算法流程。
鉤子的魅力——靈活的加入調料先對上面的基類做出以下修改:
修改完的類:
abstract class beverage
public abstract void addcondiments();
public void pourincup()
public abstract void brew() ;
public void boilwater()
public boolean getans()
}
tea類複寫方法getans()
public boolean getans()
} catch (ioexception e)
return false;
}
執行結果:
boilwater-------
brew tea-------
pourincup-------
是否加入調料:(y/n)
yadd condiment to tea-------
上述過程中,子類通過複寫了基類的方法來達到改變演算法流程的目的(是否執行addcondiments()方法),這就是鉤子的用法。
涉及的原則:好萊塢原則
好萊塢原則:別呼叫我們,我們會呼叫你。
好萊塢原則是防止「依賴腐敗」(高層和低層相互依賴)的方法,它讓高層決定流程(什麼時候呼叫低層),低層決定某些細節。 《Head first設計模式》學習筆記
開閉原則的意思是 對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的 實現乙個熱插拔的效果。簡言之,是為了使程式的擴充套件性好,易於維護和公升級。想要達到這樣的效果,我們需要使用介面和抽象類,後面的具體設計中我們會提到這點。黎克特制代換原則是物件導向設計的基本原則之一。黎克特制代...
headfirst設計模式
花了一周多一點的時間看完了headfirst的設計模式。看完之後有一種恍然大悟的感覺,仔細想想有覺得自己好像什麼也看懂。簡單說下對這本書的一點感悟吧,headfirst的書比較通俗易懂,之前看了四人幫的設計模式,看一半就有一種痛不欲生的感覺,自己水平有限,看不懂,也就沒在勉強自己了。對於模式其實簡單...
HeadFirst設計模式學習筆記02
執行時擴充套件,遠比編譯時繼承威力大。熟悉了裝飾的技巧,能夠在不改變任何底層 的情況下,給你的物件賦予新的職責。星巴茲starbuzz以擴張速度快聞名,準備更新訂單系統,以適應他們的飲料 要求。原先類的設計 現在想購買咖啡時,可以要求在其中加入各種調料,如蒸奶 steamed milk 豆漿 soy...