原理:
在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬於行爲型模式。
意圖:
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
主要解決:
一些方法通用,卻在每一個子類都重新寫了這一方法。
應用實例:
1、在造房子的時候,地基、走線、水管都一樣,只有在建築的後期纔有加壁櫥加柵欄等差異。 2、西遊記裏面菩薩定好的 81 難,這就是一個頂層的邏輯骨架。
代碼
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 模板方法模式
{
class Program
{
static void Main(string[] args)
{
AbstractClass c;
c = new ConcreteClassA();
c.TemplateMethod();
c = new ConcreteClassB();
c.TemplateMethod();
Console.ReadKey();
}
}
}
Template.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 模板方法模式
{
abstract class AbstractClass
{
//一些抽象行爲放到子類去實現
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();
//模板方法,給出了邏輯的骨架,而邏輯的組成是一些相應的抽象操作,他們都推遲到子類實現
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console.WriteLine("");
}
}
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實現");
}
}
}
參考
參考書籍:《大話設計模式》
參考鏈接: 菜鳥教程.