最基本的模式
public abstract class EverydayLife { public virtual void EatFood() { Console.WriteLine("喫飯"); } public abstract void DoWork(); public virtual void Sleep() { Console.WriteLine("睡覺"); } //模板方法,規定好執行順序,子類可以不必重寫EatFood()和Sleep(), //但每個人的工作不同,實現自己的DoWork() public void TempMethod() { EatFood(); DoWork(); Sleep(); } } public class MyEverydayLife : EverydayLife { public override void EatFood() { Console.WriteLine("喫軟飯"); } public override void DoWork() { Console.WriteLine("上班摸魚"); } public override void Sleep() { Console.WriteLine("睡懶覺"); } }
1.一次性實現一個算法的不變的部分,並將可變的行爲留給子類來實現。
2.各子類中公共的行爲應被提取出來並集中到一個公共父類中以避免代碼重複。
3.控制子類擴展。模板方法只在特定點調用“Hook”操作,這樣就只允許在這些點進行擴展。