定义
定义实现业务的架构于基类中,制定业务模板,将具体的实现步骤延迟到基类中去,根据具体类实现不同的架构方法。
举个简单的例子:例如上班:起床---交通工具---到公司工作。这就是一个业务模板,而其中变化的是:根据不同人的身份会选择不同的交通方式上班。
类图
代码
1 public class Employee 2 { 3 /// <summary> 4 ///上班 5 /// </summary> 6 public void Work() 7 { 8 GetUp(); 9 10 } 11 /// <summary> 12 /// 起床 13 /// </summary> 14 private void GetUp() 15 { 16 Console.WriteLine("Get up"); 17 } 18 /// <summary> 19 /// 工作 20 /// </summary> 21 private void DoWork() 22 { 23 Console.WriteLine("just do your job"); 24 } 25 /// <summary> 26 /// 上班交通方式 27 /// </summary> 28 protected virtual void GoToWork() 29 { 30 Console.WriteLine("by bus"); 31 } 32 } 33 public class Manager : Employee 34 { 35 protected override void GoToWork() 36 { 37 Console.WriteLine("drive car"); 38 } 39 } 40 public class Boss : Employee 41 { 42 protected override void GoToWork() 43 { 44 Console.WriteLine("on foot"); 45 } 46 } 47 48 public class TemplateClient 49 { 50 public void TestTemplate() 51 { 52 Employee emp = new Employee(); 53 emp.Work(); 54 Manager manager = new Manager(); 55 manager.Work(); 56 Boss boss = new Boss(); 57 boss.Work(); 58 } 59 }
总结
关于模板方法模式,我们在封装变化是可以是使用虚方法、也可以使用抽象方法,抽象方法为抽象类是不可以实现的,而虚方法的类则可以,这要看具体的业务。这个模式我们也是经常用到的,将业务确定好,根据不同的业务需求重写对应的方法。到达封装变化,简化代码的效果。