模板方法模式template method,同樣很簡單的模式,卻被非常廣泛的應用。
定義:定義乙個操作中的演算法的骨架,而將一些具體步驟延遲到子類中實現。它使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
適用性:
一次性實現乙個演算法的不變部分,並將可變的行為留給子類來實現。
各子類中的公共行為應該被提取出來集中到乙個公共父類中以避免**重複。
組成:抽象類:1.定義抽象的演算法步驟介面,具體的子類將重新定義它們以實現乙個演算法的各個步驟。2.實現乙個模板方法,定義乙個演算法骨架。
具體類:實現抽象類中定義的演算法步驟介面。
示例**:
//模板方法
void view::display()
//dodisplay預設實現
void dodisplay() {}
//子類重新實現介面
void myview::dodisplay()
//示例2:
if (!canopendocument(name))
return;//不能處理
document* doc = docreatedocument();
if (doc)
}而document子類實現doread操作
實現該模式需要注意的問題:
1. 使用c++訪問控制,模板方法本身不需要子類重寫,一般定義為非虛函式。模板函式中非介面的操作,只在模板函式中呼叫,可以宣告為保護成員。操作介面最好宣告為純虛函式。
2. 盡量減小操作介面,子類需要實現的介面越多,需要重定義的操作越多,客戶程式就越冗長。
factory method工廠模式,如上面例子中的docreatedocument就是乙個工廠函式。
strategy策略模式:模板方法使用繼承來改變演算法的一部分,strategy模式使用委託來改變整個演算法。
設計模式學習 模板方法模式
型別 行為模式 模板方法模式定義乙個操作中演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些 特定步驟。uml圖 新建賽車的父類 package car package public class car parent public void setsp...
設計模式學習 模板方法模式
1.雜言 設計模式,現在覺得每種模式像工業行業的一些典型零件。這些零件也可以變種出很多類似零件。吧這些零件組合起來,就成了一台機器。好吧,我現在是這麼理解的。一般 結構都是,一層呼叫一層,就是一般都是頂層的呼叫底層的。但模板方法確實反過來的,有父類呼叫子類的方法。這個聽說又牽扯到啥好萊塢原則。對於這...
設計模式學習 模板方法模式
模板方法模式 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟.父類就應該要成為子類的模板,所有重複的 都應該要上公升到父類中,而不是讓每個子類都取重複,重要,複雜的演算法,可以把核心演算法設計為模板方法,周邊的相關細...