模板方法模式簡介
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
一些方法通用,卻在每一個子類都重新寫了這一方法。關鍵代碼在抽象類實現,其他步驟在子類實現。
優點 | 缺點 |
---|---|
封裝不變的部分,擴展可變部分 | 每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大 |
提取公共代碼,便於維護 | / |
行爲由父類控制子類實現 | / |
C#模板方法模式Demo
using System;
namespace TemplateMethodPattern
{
class Program
{
static void Main(string[] args)
{
Exam zhangSan = new ZhangSan();
zhangSan.Question();
Exam liSi = new LiSi();
liSi.Question();
}
}
/// <summary>
/// Exam基類 模板方法 封裝共有的方法Question() 擴展方法 Answer()
/// </summary>
public class Exam
{
public virtual string Name { get; set; }
public virtual string Answer()
{
return string.Empty;
}
public void Question()
{
Console.WriteLine(string.Format("{0}回答問題——今天暖和嗎{1}", Name, Answer()) );
}
}
public class ZhangSan : Exam
{
public ZhangSan()
{
this.Name = "張三";
}
public override string Answer()
{
return "A";
}
}
public class LiSi : Exam
{
public LiSi()
{
this.Name = "李四";
}
public override string Answer()
{
return "B";
}
}
}
測試代碼:
參考資料
https://www.runoob.com/design-pattern/design-pattern-tutorial.html
更多: