一、概述
在軟件開發中,對某一項操作往往有固定的算法結構,而具體的子步驟會因為不同的需要而有所不同。如何可以在穩定算法結構的同時來靈活應對子步驟變化的需求呢?
二、模板方法
模板方法是一種常見的設計模式,它定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
模板方法的結構圖如下

AbstractClass是抽象類,定義了抽象的操作
ConcreteClass實現了抽象操作中與子類相關的特定步驟。
三、示例
在這里以實現一個公司的薪資系統為例介紹一下模板方法的應用。
首先定義抽象類,一般建議將抽象的操作定義為非虛public方法,將子類需要定義的特定步驟定義為抽象的protected方法。
1 publicabstractclass Employee
2 {
3 publicvoid GetSalary()
4 {
5 GetBasicSalary();
6 AddBonus();
7 }
8
9 protectedabstractvoid GetBasicSalary();
10 protectedabstractvoid AddBonus();
11 }
接着分別實現經理和CEO的薪資
1 publicclass Manager : Employee
2 {
3 protectedoverridevoid GetBasicSalary()
4 {
5 Console.WriteLine("Get Manager Basic Salary");
6 }
7
8 protectedoverridevoid AddBonus()
9 {
10 Console.WriteLine("Add Manager Bonus");
11 }
12 }
13
14 publicclass CEO : Employee
15 {
16 protectedoverridevoid GetBasicSalary()
17 {
18 Console.WriteLine("Get CEO Basic Salary");
19 }
20
21 protectedoverridevoid AddBonus()
22 {
23 Console.WriteLine("Add CEO Bonus");
24 }
25 }

