初識設計模式 chapter 08 模板方法模式

2021-06-21 13:06:45 字數 2136 閱讀 8719

直到目前,我們的議題都繞著封裝轉,我們已經封裝了物件建立、方法呼叫、複雜介面、鴨子、披薩。接下來呢?我們將要深入封裝演算法塊,好讓子類可以在任何時候都可以將自己掛接進運算裡。我們甚至會在本章學到乙個受到好萊塢影響而啟發的設計原則。

有些人沒有咖啡就活不下去,有些人則離不開茶。兩者的共同成分是什麼,當然是咖啡因啦。

讓我們扮演「**師傅「,寫一些**來建立咖啡和茶。

下面是咖啡:

public class coffee 

public void boilwater()

public void brewcoffeegrinds()

public void pourincup()

public void addsugarandmilk()

}

下面是茶

public class tea 

public void boilwater()

public void steepteabag()

public void addlemon()

public void pourincup()

}

我們發現了重複的**,這是好現象。這表示我們需要清理一下設計了。在這裡,既然茶和咖啡是如此的相似,似乎我們應該將共同的部分抽出來,放進乙個基類中。

現在我們有了新的preparerecipe()方法,但是需要讓它能夠符合**。要想這麼做,我們先從caffeinebeverage(咖啡因飲料:茶和咖啡)超類開始。

public abstract class caffeinebeverage 

/** 因為咖啡和茶處理這些方法的做法不同,所以這兩個方法必須被宣告為抽象,由子類來實現具體方法。

*/abstract void brew();

abstract void addcondiments();

void boilwater()

void pourincup()

}

最後,我們需要處理咖啡和茶類了。這兩個類現在都是依賴超類(咖啡因飲料)來處理沖泡法,所以只需要自行處理沖泡和新增調料部分。

preparerecipe()是我們的模板方法。為什麼?

因為:1、畢竟它是乙個方法。

2、它用作乙個演算法的模板,在這個例子中,演算法是用來製作咖啡因飲料的。

在這個模板中,演算法內的每乙個步驟都被乙個方法代表了。某些方法是由這個類(超類)來處理的,某些方法則是由子類來處理。

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

鉤子是一種被宣告在抽象類中的方法,但只有空的或者預設的實現。鉤子的存在,可以讓子類有能力對演算法的不同點進行掛鉤。要不要掛鉤,由子類自行決定。

鉤子有好幾種用途,讓我們先看其中乙個,稍後再看其他幾個:

public abstract class caffeinebeveragewithhook 	} 

abstract void brew();

abstract void addcondiments();

void boilwater()

void pourincup()

/** 我們再這裡定義了乙個方法,(通常)是空的預設實現。這個方法只會返回true,不做別的事情。

* 這就是鉤子,子類可以覆蓋這個方法,但不見得一定要這麼做。

*/boolean customerwantscondiments()

}

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

好萊塢原則可以給我們一種防止「依賴腐敗「的方法。當高層元件依賴低層元件,而低層元件又依賴高層元件,而高層元件又依賴邊側元件,依賴腐敗就發生了。在這種情況下,沒有人可以輕易地搞定系統是如何設計的。

在好萊塢原則之下,我們允許低層元件講自己掛鉤到系統上,但是高層元件決定什麼時候和怎麼樣使用這些低層元件。換句話說,高層元件對待低層元件的方式是」別呼叫我們,我們會呼叫你「。

實現compareto()方法即可。

模板方法從字面意思就很好理解,把握住新學的好萊塢原則,避免依賴腐敗,這個就是本章的精髓。

Chapter08 工廠方法模式

工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類中。工廠方法模式在實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端 來進行。你想要...

設計模式 初識

大致將設計模式看了一遍,雖說是第一遍看,但是好像也有些精讀的嫌疑,沒有掌握快速閱讀的精髓,但這個不是重點。大話模式 首先想到的是 大話西遊 確實這本書有些這樣的傾向,就像書中敘述的,這不是一本程式集,這不是一本故事集,這是一本通過故事講述查詢如何設計的方法集。故事都太經典了,以至於看完書之後,問模式...

設計模式 初識

從何而來?說到模式,我就有一種專業自豪感了。因為學的專業是工程管理,和建築方面打交道比較多,以至於每次有人問我學的什麼專業,我都會開玩笑的說,其實就是搬磚的。那麼為什麼說到模式,我就有一種專業自豪感呢?因為模式的思想就是基於建築的思想而產生的。在建築過程中,慢慢發現人們對於舒適住宅和城市環境存在一些...