《Head First 設計模式》筆記8

2021-08-18 14:10:44 字數 2010 閱讀 4401

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

好萊塢原則:別呼叫(打**給)我們,我們會呼叫(打**給)你。

(由高層元件決定低層元件的行為,而不是反過來)

現在你有兩種沖泡飲料,分別是咖啡和茶。

咖啡的沖泡過程:

1. 把水煮沸

2. 用沸水沖泡咖啡

3. 把咖啡倒進杯子

4. 加糖和牛奶

茶的沖泡過程:

1. 把水煮沸

2. 用沸水浸泡茶葉

3. 把茶倒進杯子

4. 加檸檬

然後是實現它們的過程:

衝咖啡:

class coffee 

public

void

boilwater()

public

void

brewcoffeegrinds()

public

void

pourincup()

public

void

addsugarandmilk()

}

沖茶:

class tea 

public

void

boilwater()

public

void

steepteabag()

public

void

pourincup()

public

void

addlemon()

}

飲料抽象類,其中 1、3 兩步都是子類共有的:

abstract class beverage 

public

void

boilwater()

public

abstract

void

brew();

public

void

pourincup()

public

abstract

void

addcondiments();

}

然後是繼承飲料的咖啡:

class coffee extends beverage 

public

void

addcondiments()

}

茶:

class tea extends beverage 

public

void

addcondiments()

}

測試

public

static

void

main(string args)

在上面的栗子中,飲料被強制加入了調味料,但是有時我們就想喝純咖啡或者純茶,怎麼辦呢? => 可以使用鉤子讓使用者決定是否加調味料。

abstract class beverage 

}public

void

boilwater()

public

abstract

void

brew();

public

void

pourincup()

public

abstract

void

addcondiments();

// 該函式就相當於乙個鉤子

// 子類可以覆蓋該方法從而決定使用者是否加調味料

public

boolean

customerwantscondiments()

}

Head First 設計模式筆記

將變化部分和不變部分分離出來,讓 適應變化 封裝變化 針對介面程式設計,而不是針對實現程式設計 即,將一類行為抽象成行為類介面,可以應對變化,符合原則1 多用組合,少用繼承 這條原則,是建立在原則2的基礎上的,好處是系統有很大的彈性,執行時可以動態改變物件的行為 例如 策略模式 定義演算法簇 學會使...

Head First 設計模式筆記

1.找出應用中可能變化的地方,將它們獨立出來。不要和那些不需要變化的部分混在一起 2.針對介面程式設計,而不是針對實現程式設計 針對 介面程式設計 的意思是 針對超型別程式設計 針對介面程式設計關鍵在於多型。利用多型程式設計師可以針對超型別程式設計,編譯器執行會根據實際情況執行到真正的行為,而不會將...

head first 設計模式 工廠模式筆記

工廠模式 是舉了個做pizza的例子 有pizzastore抽象類裡邊有個pizza物件變數,orderpizza中裡面有個方法 叫做createpizza,同時外面定義了乙個createpizza抽象方法,然後實現裡面有個方法 叫做createpizza,此方法更具不同的引數new不同的對 象,如...