一.介绍
模板方法模式(Template Pattern)。属于行为型模式。它定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二.实现
一说到模板,就能想到这是个现有的,可以直接套用的东西。举个例子,我们去开车,不管开什么车,步骤都差不多,上车、插钥匙、踩油门,这就可以定义为一个模板,我们跟着这个模板去运作就好。这种情况下,可以用模板方法模式去处理。
//抽象模板角色 public abstract class Car { public virtual void DriveCar() { Method1(); Method2(); Method3(); } public abstract void Method1(); public void Method2() { Console.WriteLine("插钥匙"); } public void Method3() { Console.WriteLine("踩油门"); } } //具体模板角色 public class Truck : Car { public override void Method1() { Console.WriteLine("进入货车"); } } //具体模板角色 public class Bus : Car { public override void Method1() { Console.WriteLine("进入巴士"); } } //调用 public static void Main(string[] args) { Car t1 = new Truck(); t1.DriveCar(); var t2 = new Bus(); t2.DriveCar(); }
在上面实现中,具体子类重写了其中的方法,不难理解,因为模板也不能完全套用,具体实现时需要不同的操作。
三.总结
优点:
1.实现了代码复用。
2.能够灵活地应对子步骤的变化,符合开闭原则。
缺点:
1.因为引入了一个抽象类,如果具体实现过多的话,需要用户花更多时间去理清类之间的关系。