模板模式——定义一个操作中算法的骨架,而降一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。
模板模式时为了解决避免子类去重复一项操作而设计的一种模式,假如自己都有一个方法去现实一个操作,并且在子类创建对象时重复进行该操作,那么可以将该操作给父类,让父类去完成这些操作,统一输出。
它通过把不变行为搬移到超类,去除子类中的重复代码,提供了一个很好的代码复用平台,下面是具体的实现方式。
1.Template类,模板类,定义了一些由子类去实现的抽象方法,并且让子类实现了该方法后再统一的模板方法里去执行
1 ///2 /// 模板抽象类 3 /// 4 public abstract class Template 5 { 6 //定义一些抽象方法,放到子类去实现 7 public abstract void PrimitiveOperation1(); 8 public abstract void PrimitiveOperation2(); 9 10 ///11 /// 模板方法,给出了逻辑的骨架12 /// 逻辑的组成是一些相应的抽象操作,13 /// 它们都推迟到子类去实现14 /// 15 public void TemplateMethod()16 {17 PrimitiveOperation1();18 PrimitiveOperation2();19 20 //这里也可以做一些额外的事21 }22 }
2.Operation类,子类,实现了模板类定义的抽象方法
1 ///2 /// 继承模板的子类A 3 /// 4 class OperationA:Template 5 { 6 public override void PrimitiveOperation1() 7 { 8 //子类方法实现这个方法的操作 9 }10 11 public override void PrimitiveOperation2()12 {13 //子类方法实现这个方法的操作14 }15 }16 ///17 /// 继承模板的子类B18 /// 19 class OperationB : Template20 {21 public override void PrimitiveOperation1()22 {23 //子类方法实现这个方法的操作24 }25 26 public override void PrimitiveOperation2()27 {28 //子类方法实现这个方法的操作29 }30 }
3.客户端代码,由父类去实例化子类,并且执行模板方法
1 static void Main(string[] args) 2 { 3 //创建模板 4 Template template; 5 6 //实现子类 7 template=new OperationA(); 8 9 //实现模板方法10 template.TemplateMethod();11 12 template=new OperationB();13 template.TemplateMethod();14 }
以上内容部分参考程杰的《大话设计模式》一书