一、模板方法模式简介(Brief Introduction

模板方法模式 (Template Method Pattern), 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重定义算法的某些特定步骤。模板方法模式把不变行为搬移到超类,从而去除子类中的重复代码,实际上模板方法模式就是提供了一个代码复用平台。 <?XML:NAMESPACE PREFIX = O />

二、解决的问题(What To Solve

       要完成在某一细节上层次一致的一个过程或一系列步骤,但个别步骤在更详细的层次上实现不同时,可以使用模版方法模式解决问题。

三、模板方法模式分析(Analysis

1、模板方法模式结构

<?XML:NAMESPACE PREFIX = V />
抽象类 AbstractClass ,实现了一个模版方法,定义了一个算法框架,具体子类将重新定义 PrimitiveOperation1 PrimitiveOperation1 以实现一个算法的步骤。

子类 ConcreteClassA ConcreteClassB ,实现 PrimitiveOperation1 PrimitiveOperation1 以完成算法中与特定子类相关的步骤。

2、模板方法模式代码

1 、抽象模板类 AbstractClass 及其模板方法 TemplateMethod()

public abstract class AbstractClass

{

    public abstract void PrimitiveOperation1();

    public abstract void PrimitiveOperation2();

 

    public void TemplateMethod()

    {

        PrimitiveOperation1();

        PrimitiveOperation2();

        Console .WriteLine(" 模板方法执行完 " );

    }

}

 

2 、子类 ConcreteClassA ConcreteClassB 实现父类定义的抽象方法

public class ConcreteClassA :AbstractClass

{

    public override void PrimitiveOperation1()

    {

        Console .WriteLine(" 具体实现类 {0} 方法 1 实现 " ,this .GetType().Name);

    }

 

    public override void PrimitiveOperation2()

    {

        Console .WriteLine(" 具体实现类 {0} 方法 2 实现 " , this .GetType().Name);

    }

}

 

public class ConcreteClassB :AbstractClass

{

    public override void PrimitiveOperation1()

    {

        Console .WriteLine(" 具体实现类 {0} 方法 1 实现 " , this .GetType().Name);

    }

 

    public override void PrimitiveOperation2()

    {

        Console .WriteLine(" 具体实现类 {0} 方法 2 实现 " , this .GetType().Name);

    }

}

 

3 、客户端代码

static void <?XML:NAMESPACE PREFIX = ST1 />Main (string [] args)

{

    AbstractClass abstractClass = new ConcreteClassA ();

    abstractClass.TemplateMethod();

 

    abstractClass = new ConcreteClassB ();

    abstractClass.TemplateMethod();

 

    Console .ReadKey();

}

 

3、模板方法模式运行结果