設計模式學習十一 模板方法模式

2021-09-01 03:38:32 字數 2234 閱讀 4279

一.概念

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

二.uml

abstractclass(定義了演算法的骨架)。

concreteclass(定義了演算法估計中具體演算法的實現)。

三.例項分析

做菜,對我來說是相當的簡單。我做菜,都是乙個流程:洗菜-放油-放菜-放鹽-小炸一下-小煮一下-...。做魚和做肉,除了最後魚肉的差別外,其它的辣椒顏色,味道什麼的,毫無差別。就拿這個例子來說明今天的模式。

/** * 做菜

* @author eason

* */

public abstract class cook }

//準備工作

public void prepare()

//放油

public abstract void putoil();

//放菜

public abstract void putfood();

//放作料

public void putcondiments()

//等待

public abstract void waitamoment();

//品嚐是否美味,預設美味,子類不需要重寫此方法

//如果不美味,子類重寫此方法即可

public boolean tastedelicious()

//做點其它的事情,讓味道更好

public void dootherthings()

}cookfish

package com.zzy.templatemethod;

/** * 做魚

* @author eason

* */

public class cookfish extends cook

@override

public void putfood()

@override

public void waitamoment()

}

cookegg

package com.zzy.templatemethod;

/** * 做雞蛋

* @author eason

* */

public class cookegg extends cook

@override

public void putfood()

@override

public void waitamoment()

@override

public boolean tastedelicious()

@override

public void dootherthings()

}

testtemplatemethod

package com.zzy.templatemethod;

/** * 測試類

* @author eason

* */

public class testtemplatemethod

}

四.使用場景及使用感受模板定義了一系列演算法的步驟,這一系列演算法中肯定有乙個抽象的演算法,也就是模板方法是乙個工作的概要,至於一套完完整整的工作,是需要子類來參與的。

如果對這一系列的演算法,有些子類不需要其中的某乙個或者某一些演算法,可以用"掛鉤"來實現,鉤子說明了演算法的可選性。模板類裡面定義這些演算法的預設實現或者空實現,子類有需要的話就重寫這些演算法。如上述中的tastedelicious方法和dootherthings方法。 

當不變的和可變的方法在子類實現中混在一起的時候,不變的行為就會在子類中重複出現。通過模板方法模式把這些不變的行為搬到單一的地方,可以幫助子類擺脫重複的不變行為的糾纏。   

C 設計模式(十一)模板方法模式

理解了模板方法的定義之後,自然實現模板方法也不是什麼難事了,下面以生活中炒蔬菜為例來實現下模板方法模式。在現實生活中,做蔬菜的步驟都大致相同,如果我們針對每種蔬菜類定義乙個燒的方法,這樣在每個類中都有很多相同的 為了解決這個問題,我們一般的思路肯定是把相同的部分抽象出來到抽象類中去定義,具體子類來實...

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

型別 行為模式 模板方法模式定義乙個操作中演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些 特定步驟。uml圖 新建賽車的父類 package car package public class car parent public void setsp...

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

1.雜言 設計模式,現在覺得每種模式像工業行業的一些典型零件。這些零件也可以變種出很多類似零件。吧這些零件組合起來,就成了一台機器。好吧,我現在是這麼理解的。一般 結構都是,一層呼叫一層,就是一般都是頂層的呼叫底層的。但模板方法確實反過來的,有父類呼叫子類的方法。這個聽說又牽扯到啥好萊塢原則。對於這...