Template Method(模式方法)

2021-10-03 13:16:58 字數 3149 閱讀 1345

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

確保演算法的結構保持不變,同時由子類提供部分實現

在演算法結構部分通用的情況

abstracttemplate定義乙個演算法結構以及組成步驟,由乙個模板方法和若干個基本方法構成

-> 模板方法:定義了演算法的結構,按某種順序呼叫其包含的基本方法

-> 基本方法:整個演算法中的乙個步驟,包含以下型別

抽象方法在abstracttemplate中宣告,由concretetemplate實現

具體方法在abstracttemplate中已經實現,在concretetemplate中可以繼承或重寫

鉤子方法在abstracttemplate中已經實現,包括用於判斷的邏輯方法和需要concretetemplate重寫的空方法兩種

abstracttemplate

public

abstract

class

abstracttemplate

protected

void

abstractmethod()

;protected

void

hookmethod()

;private

void

concretemethod()

}

concretetemplate

public

class

concretetemplate

extends

abstracttemplate

@override

public

void

hookmethod()

}

abstracttemplate

public

abstract

class

caffeinebeveragewithhook

}abstract

void

brew()

;abstract

void

addcondiments()

;void

boilwater()

void

pourincup()

// hook 子類可以覆蓋這個方法,但不見得一定要這麼做

boolean

customerwantscondiments()

}

concretetemplate

public

class

coffeewithhook

extends

caffeinebeveragewithhook

@override

void

addcondiments()

@override

public

boolean

customerwantscondiments()

else

}private string getuserinput()

catch

(ioexception ioe)

if(answer == null)

return answer;

}}

public

class

teawithhook

extends

caffeinebeveragewithhook

@override

void

addcondiments()

@override

public

boolean

customerwantscondiments()

else

}private string getuserinput()

catch

(ioexception ioe)

if(answer == null)

return answer;

}}

client

public

class

beveragetestdrive

}

result

****** tea...

boiling water

steeping the tea

pouring into cup

would you like lemon with your tea (y/n)?

yadding lemon

****** coffee...

boiling water

dripping coffee through filter

pouring into cup

would you like milk and sugar with your coffee (y/n)?

n

模式分類歸屬 ↩︎

意圖:描述該模式的作用,以及該模式的定義 ↩︎

動機:給出了問題以及如何解決這個問題的具體場景 ↩︎

適用性:描述模式可以被應用在什麼場合 ↩︎

結構:提供了圖示,顯示出參與此模式的類之間的關係 ↩︎

參與者:描述在此設計中所涉及到的類和物件在模式中的責任和角色 ↩︎

協作 :告訴參與者如何在此模式中合作 ↩︎

結果:描述採用此模式之後可能產生的效果,好的與不好的 ↩︎

實現:提供了在實現該模式時需要使用的技巧,以及應該小心面對的問題 ↩︎

範例**:提供**的片段 ↩︎

已知應用:用來描述已經在真實系統中發現的模式例子 ↩︎

相關模式:描述了此模式和其他模式之間的關係 ↩︎

Template Method 模板模式

模式定義 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,從而使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。使用方法 各子類中公共的方法提煉出來,集中到父類中定義。而不同的子類所特有的方法,可以通過繼承父類的方法在內部自定義。使用範圍 多個子類存在共通的方法,個別的方法...

設計模式 template method

1 定義乙個操作中演算法的骨架,將一些步驟推遲到子類中實現。可以不改變演算法的結構而重定義該演算法的步驟 2 要完成在某乙個細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同。3 允許定義可變的子步驟,同時保持基本過程不致 4 由乙個抽象類組成,這個抽象類定義了需要覆蓋的...

模板模式 Template Method

定義 模板方法模式準備乙個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先制定乙個頂級邏輯框架,而將邏輯的細節留給具體的子類去實現。開閉原則是指乙個軟體實體應該對擴充套件開...