1.概念:定義一個操作中的算法的骨架,而将一些步驟延遲到子類中。模闆方法使得子類可以不改變算法的結構即可重新定義該算法的某些特定步驟。
2.模闆方法的特點:
當代碼環境中,子類們的行為方法存在重複,通過抽取封裝不變的行為到父類,進而去除子類重複代碼,代碼因重複利用變得簡潔。
模闆方法非常簡單,其核心是利用了繼承機制,AbstractClass是一個抽象模闆,包括基本方法和模闆方法。其中基本方法是一個已經實作的虛方法,模闆方法是具體的方法,他們構成了頂級的邏輯骨架。而邏輯的具體操作延遲到具體的子類ConcreteClass來實作。
代碼示例:
public class TestPaper
{
//模闆方法,//即方法骨架,一般是具體方法,可以一個或多個,實作對基本方法的調用。
protected void TestQuestion1()
{
Console.WriteLine("1+1=?");
Console.WriteLine("答案:"+Answer1());
}
//基本方法,//由子類實作,并在模闆方法中被調用
public virtual string Answer1() { return ""; }
public virtual string Answer2() { return ""; }
……
}
public class StudentATestPaper:TestPaper
protected override string Answer1() {return "A"; }
protected override string Answer2() {return "B"; }
用戶端:
StudentATestPaper stuA=new StudentATestPaper();
stuA.TestQuestion1();
stuA.TestQuestion2();
學習所得:
編碼中,同樣的代碼出現過兩次,就需要适當的對設計産生懷疑。