HeadFirst 設計模式學習之模板方法模式

2021-07-13 01:58:11 字數 1213 閱讀 2367

模板方法定義

在乙個方法中定義乙個演算法骨架,而將一些步驟延遲到子類中,模板方

法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。

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...