设计模式之22 - 模板方法Template method

来源:互联网 发布:ubuntu配置tomcat环境 编辑:程序博客网 时间:2024/05/29 19:24

        模板 是一个通俗的概念定义,PPT模板、Word模板、Excel模板,你能接触的模板有很多,模板其实就是一个 Example、一个框架,你根据这个例子去具体实现。

        模板方法 的概念与此类似,在 抽象类中定义 算法的骨架,将具体内容 延迟到子类实现


        上面的这个图说明的比较清晰,我们通过代码再来看一下:

class AbstractClass{public:    // 模板方法,给出逻辑骨架,而逻辑的组成是相应的抽象操作,它们推迟到子类去实现    void TemplateMethod()    {        PrimitiveOperation1();        PrimitiveOperation2();        PrimitiveOperation3();    }protected:    // 一些抽象行为,放到子类去实现    virtual void PrimitiveOperation1();    virtual void PrimitiveOperation2();    virtual void PrimitiveOperation3();};// 具体类A,实现了抽象类中的特定步骤class ConcreteClassA : AbstractClass{protected:    virtual void PrimitiveOperation1()    {        // ……    }    virtual void PrimitiveOperation2()    {        // ……    }    virtual void PrimitiveOperation3()    {        // ……    }};// 具体类B,实现了抽象类中的特定步骤 - 与A不同class ConcreteClassB : AbstractClass{protected:    virtual void PrimitiveOperation1()    {        // 与ConcreteClassA不同    }    virtual void PrimitiveOperation2()    {        // 与ConcreteClassA不同    }    virtual void PrimitiveOperation3()    {        // 与ConcreteClassA不同    }};

        模板方法 通过继承来实现方法的扩展,这种思路比较重要的意义在于能够对算法的轮廓进行 划分,能够有效分离出主次,方便从整体到局部的扩展。

        在程序的主框架相同、细节不同的情况下,可以考虑使用模板方法。

2 0