設計模式詳解(十三) 模板方法模式

2021-10-25 06:30:28 字數 2161 閱讀 1985

使用程式模擬烹飪的整個過程,為了簡化問題,目前只烹飪蔬菜和肉兩種。

定義抽象烹飪類,建立兩個子類分別實現蔬菜與肉的烹飪。

客戶端測試

public

static

void

main

(string[

] args)

輸出

烹飪開始...

準備蔬菜...

新增食用油...

加生抽、鹽...

烹飪結束...

------------------------------------

烹飪開始...

準備肉...

肉焯水...

新增食用油...

加老抽、生抽、醬油、鹽...

烹飪結束...

上面的設計簡單易懂,且相互隔離。但是仔細一看很有問題。首先就是存在大量重複的**,烹飪開始結束,加食用油,加調料等;其次對於烹飪這個操作,它的執行流程一般是固定不變的,因此我們可以將烹飪操作定義出框架放在父類中,子類只存放框架中的動態的**。

理解了上面的改進策略,那麼**就很簡單了

客戶端測試

public

static

void

main

(string[

] args)

輸出

烹飪開始...

準備蔬菜...

新增食用油...

加生抽、鹽...

烹飪結束...

------------------------------------

烹飪開始...

準備肉...

肉焯水...

新增食用油...

加老抽、生抽、醬油、鹽...

烹飪結束...

模板方法模式在抽象類中規定了操作的執行流程框架,子類只要實現自己需要的細節。一方面提高**復用率,另一方面可以規範流程,減少不必要的缺陷。

模板方法模式(template pattern):定義乙個操作中的演算法骨架,而將演算法的一些步驟延遲到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟

模板方法模式一般包含如下角色

abstract

class

abstractclass

}public

void

specificmethod()

//具體方法

public

abstract

void

abstractmethod1()

;//抽象方法1

public

abstract

void

abstractmethod2()

;//抽象方法2

//鉤子方法:判斷是否需要執行

public

boolean

isneedexcute()

//鉤子方法

public

void

excute()

}

concrete class具體子類實現抽象類中所定義的抽象方法和鉤子方法

//具體子類

class

concreteclass

extends

abstractclass

public

void

abstractmethod2()

//鉤子方法

public

boolean

isneedexcute()

//鉤子方法

缺點

設計模式 二十三 模板方法模式

template method pattern 模板方法模式 template method pattern 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。模板方法模式是一種基於繼承的 復用技術,它是一種類行為型...

設計模式之模板方法模式(二十三)

slf4j public abstract class drink 燒開水 public void firewater public void brewing 新增原料 例如 咖啡,牛奶等 abstract void addmaterials abstract void addother 沖泡蜂蜜綠...

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...