23種設計模式之模闆方法(Template Method)
模闆方法模式是一種類的行為型模式,用于定義一個操作中算法的骨架,而将一些步驟延遲到子類中。模闆方法模式使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟,其缺點是對于不同的實作,都需要定義一個子類,這會導緻類得個數增加,但是更加符合類職責的配置設定原則,使得類得内聚性得以提高。
優點:代碼重用的基礎技術
使用場景:
1)想要一次實作算法的不變部分,而使用子類實作算法的可變行為。
2)當子類間的通用行為需要分解、定位到通用類的時候,這樣可以避免代碼重複的問題。
Template Method
public abstract class Document
{
/// <summary>
/// 存儲文檔資料
/// </summary>
public void Save()
Console.WriteLine("存儲文檔資料");
}
/// 打開文檔
/// <param name="docName"></param>
public void Open(string docName)
Console.WriteLine("打開文檔");
/// 關閉文檔
public void Close()
Console.WriteLine("關閉文檔");
public abstract void Read(string docName);//抽象方法讀取文檔
public abstract class Application
private IList<Document> docs = new List<Document>();//文檔對象清單
/// 判斷是否可以打開指定文檔
/// <returns>傳回true時表示可以打開;傳回false時表示不可打開</returns>
public bool CanOpenDocument(string docName)
bool flag = true;
//
return flag;
public void AddDocument(Document aDocument)
docs.Add(aDocument);//将文檔對象添加到文檔對象集合當中
Console.WriteLine("加入了aDocument對象");
public abstract Document DoCreateDocument();//抽象方法 建立一個文檔對象
/// 打開指定文檔
/// <param name="docName">文檔路徑</param>
public void OpenDocument(string docName)
if (!CanOpenDocument(docName))
Console.WriteLine("文檔無法打開!");
return;
Document adoc = DoCreateDocument();
adoc.Open(docName);
adoc.Read(docName);
AddDocument(adoc);