模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
当我们完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,通常考虑用模板方法模式来处理。
模板方法模式通过把不变行为移到父类,去除子类中的重复代码来体现它的优势。当不变的行为和可变的行为在子类实现中混在一起的时候,通过模板方法模式可以帮助子类摆脱重复不变行为纠缠。
定义父类:
public abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } }
子类继承父类,实现父类中的方法
public class ConcreteClassA:AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("A类实现方法1"); } public override void PrimitiveOperation2() { Console.WriteLine("A类实现方法2"); } } public class ConcreteClassB:AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("B类实现方法1"); } public override void PrimitiveOperation2() { Console.WriteLine("B类实现方法2"); } }
客户端调用
static void Main(string[] args) { AbstractClass A; A = new ConcreteClassA(); A.TemplateMethod(); A = new ConcreteClassB(); A.TemplateMethod(); Console.ReadKey(); }
运行结果: