概述:
模板方法(TemplateMethod):定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。
TemplateMethod使得子類可以不改變一個演算法的結構即可以重定義該演算法的某些特定步驟。
實用性:
1.一次性實現一個演算法的不變的部分,並將可變的行為留給子類來實現。
2.各子類中公用的行為應被提取出來並集中到一個公用類中以避免代碼重複。
首先識別現有代碼的不同之處,並且將不同之處分離為新的操作。
最後,用一個調用這些新的操作的模板方法來替換這些不同的代碼。
3.控制子類的擴充
類圖:
結構展示代碼:
1.定義抽象父類
abstract class AbstractClass
{
/// <summary>
/// 抽象行為,放到子類去實現
/// </summary>
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();
/// <summary>
/// 模板方法,給出了邏輯的架構,但是裡面的抽象操作都需要子類去實現
/// </summary>
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine("");
}
}
2.定義實現演算法的子類
class ConcreteClassA:AbstractClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine("具體類A實現抽象父類的方法1");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("具體類A實現抽象父類的方法2");
}
}
class ConcreteClassB:AbstractClass
{
public override void PrimitiveOperation1()
{
Console.WriteLine("具體類B實現抽象父類的方法1");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("具體類B實現抽象父類的方法2");
}
}
3.用戶端調用
/// <summary>
/// 測試模板方法
/// </summary>
static void TestTemplateMethod()
{
AbstractClass c;
c = new ConcreteClassA();
c.TemplateMethod();
c = new ConcreteClassB();
c.TemplateMethod();
Console.Read();
}
小結:
模板方法就是最簡單的代碼複用和封裝,在很多系統類別庫中都有使用,讓你的系統的結構更加合理