//抽象模版,定义并实现一个模版方法 abstract class AbstractClass { //一些抽象行为,放到子类去实现 public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); //模版方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,他们都推迟到子类中实现 public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } }
//以下是两个继承模版类的具体类,实现模版所定义的一个或多个抽象方法
//具体A类
class ConcreteClassA : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具体类A方法1实现"); } public override void PrimitiveOperation2() { Console.WriteLine("具体类A方法2实现"); } }
//具体B类
class ConcreteClassB : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具体类B方法1实现"); } public override void PrimitiveOperation2() { Console.WriteLine("具体类B方法2实现"); } }
//客户端代码 class MainProgram { void Main() { AbstractClass ac = null; ac = new ConcreteClassA(); ac.TemplateMethod(); ac = new ConcreteClassB(); ac.TemplateMethod(); Console.ReadKey(); } }
通过以上代码,很容易看出模版方法模式的好处,就是定义了一个*的骨架(框架),这个框架给出了具体的操作顺序,而每一步的操作内容延迟到子类去实现,那么当我们要修改某一步的操作时,只需要修改这步的子类方法即可,而不会影响到整个流程顺序。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模版方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。