模板方法模式
定義:定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
舉例:學生甲和學生乙抄寫的試卷非常類似,除了答案不同之外,其餘的題目完全相同。如果老師要更改題目,意味著兩個人的試卷都需要更改,這樣很容易出錯。如何做才能使錯誤降低到最少,則需要模板方法模式。
試卷**如下:
namespace _10._3_提煉**
protected virtual string answer1()
//試題2
public void testquestion2()
protected virtual string answer2()
//試題3
public void testquestion3()
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()
}class program}}
執行結果如下:
模板方法模式包含如下兩個角色:
(1) abstractclass(抽象類):在抽象類中定義了一系列基本操作(primitiveoperations),這些基本操作可以是具體的,也可以是抽象的,每乙個基本操作對應演算法的乙個步驟,在其子類中可以重定義或實現這些步驟。同時,在抽象類中實現了乙個模板方法(template method),用於定義乙個演算法的框架,模板方法不僅可以呼叫在抽象類中實現的基本方法,也可以呼叫在抽象類的子類中實現的基本方法,還可以呼叫其他物件中的方法。
(2) concreteclass(具體子類):它是抽象類的子類,用於實現在父類中宣告的抽象基本操作以完成子類特定演算法的步驟,也可以覆蓋在父類中已經實現的具體基本操作。
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...
設計模式之模板方法模式
定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...