定 义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使子类可以不改变一个算法的结构即可重定义该算法中的一些特定步骤。
结构图:
AbstractClass.cs:

abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); } }
ConcreteClassA.cs:

class ConcreteClassA : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具体类A方法1实现"); } public override void PrimitiveOperation2() { Console.WriteLine("具体类A方法2实现"); } }
ConcreateClassB.cs:

class ConcreteClassB : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具体类B方法1实现"); } public override void PrimitiveOperation2() { Console.WriteLine("具体类B方法2实现"); } }
客户端实现:

class Program { static void Main(string[] args) { AbstractClass c; c = new ConcreteClassA(); c.TemplateMethod(); c = new ConcreteClassB(); c.TemplateMethod(); Console.Read(); } }
优势:模板方法模式把不变的行为搬移到超类,去除了子类中重复的代码,提供了一个良好的代码复用平台。