模板方法模式定義了乙個操作中的演算法的骨架,將一些步驟延遲到子類中。模板方法使得子類能夠不改變乙個演算法的結構就可以重定義該演算法的某些特定步驟。
結構圖:
abstractclass是抽象模板。定義並實現乙個模板方法,這個模板方法通常是乙個詳細方法,它給出乙個頂級邏輯的骨架。
concreteclass是詳細模板。實現父類所定義的乙個或多個抽象方法。每個abstractclass能夠有隨意多個concreteclass,每個concreteclass都能夠給出頂級邏輯的組成步驟。
上面說得比較官方,以下我們通過乙個詳細的樣例來理解一下。
大家都經歷了無數次的考試,對這個我們都不太喜歡的過程也非常清楚。首先由出題老師選好考題,然後整理成一套試卷(乙個word)。
一. 選擇題(每題一分,共10分)
1. 複製的快捷鍵是【】a.ctrl+a b.ctrl+c c.ctrl+l d.ctrl+d
答案:
2. 全選的快捷鍵是【】a.ctrl+a b.ctrl+c c.ctrl+l d.ctrl+d
答案:
3. 貼上的快捷鍵是【】a.ctrl+a b.ctrl+c c.ctrl+v d.ctrl+d
答案:……
這套試卷就是乙個抽象模板,它給出試卷的骨架,考生試卷之間同樣的部分都包括到這部分中。然後用它去列印n多份試卷,發給每乙個同學。所以大家的試題和捲頭都是一樣的。來自於乙個模板。
試卷是用來考試的,須要填寫答案。因為考生給出的答案不盡同樣,編碼時把答題寫成乙個虛方法answer,讓繼承它的子類去重寫。
我們拿到試卷後,就開始埋頭苦「做」,在答題位置寫上自己的答案,事實上就是重寫answer。給出抽象方法的不同實現。考試時間到,監考老師收起考生的試卷。考生的試卷就是詳細模板。繼承抽象模板。
學生甲的試卷:
一. 選擇題(每題一分。共10分)
1. 複製的快捷鍵是a.ctrl+a b.ctrl+c c.ctrl+l d.ctrl+d
答案:b
2. 全選的快捷鍵是【】a.ctrl+a b.ctrl+c c.ctrl+l d.ctrl+d
答案:c
3. 貼上的快捷鍵是【】a.ctrl+a b.ctrl+c c.ctrl+v d.ctrl+d
答案:c
……學生乙的試卷:
一. 選擇題(每題一分,共10分)
1. 複製的快捷鍵是a.ctrl+a b.ctrl+c c.ctrl+l d.ctrl+d
答案:b
2. 全選的快捷鍵是【】a.ctrl+a b.ctrl+c c.ctrl+l d.ctrl+d
答案:c
3. 貼上的快捷鍵是【】a.ctrl+a b.ctrl+c c.ctrl+v d.ctrl+d
答案:a
……分析了半天,接下來展示**。
class test*****
public void testquestion2()
public void testquestion3()
protected virtual string answer1()
protected virtual string answer2()
protected virtual string answer3()
}//學生甲的試卷
class test*****a:test*****
protected override string answer2()
protected override string answer3()
}//學生乙的試卷
class test*****b : test*****
protected override string answer2()
protected override string answer3()
}
client:
static void main(string args)
顯示:
最後我們小結一下。縱觀上面的小樣例,就是有乙個過程須要執行,這個過程包含一系列步驟。整個過程從高層次看是一樣的,可是每乙個步驟的詳細細節不一樣。模板方法模式就是把不變的搬到超類中,從而去除子類中的反覆**,提供乙個**復用平台。在軟體公司中,乙個設計師負責給出乙個演算法的輪廓和骨架,還有一些設計師則負責給出這個演算法的各個邏輯步驟。代表這些詳細邏輯步驟的方法稱做基本方法;而將這些基本法方法總匯起來的方法叫做模版方法。
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
設計模式 模板方法設計模式
物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...
設計模式 模板方法模式
模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...