最基本的模式
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”操作,这样就只允许在这些点进行扩展。