C++设计模式浅识模板方法模式

原创 2016年06月01日 06:43:00

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

适用的一个时机:当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。

模板方法的两个角色:

  1. 抽象类(AbstractClass): 给出顶级逻辑的框架
  2. 具体产品类(ConcreteClass):实现父类所定义时的一个或多个抽象方法。一个AbstractClass可以有多个ConcreteClass

结构图:

测试用例:

int main(){
    AbstractClass *pAbstractA = new ConcreteClassA;
    pAbstractA->TemplateMethod();  //Output: ConcreteA Operation1 ConcreteA Operation2

    AbstractClass *pAbstractB = new ConcreteClassB;
    pAbstractB->TemplateMethod();   //Output: ConcreteB Operation1 ConcreteB Operation2

    if(pAbstractA) delete pAbstractA;
    if(pAbstractB) delete pAbstractB;

    return 0;
}

模板方法实现:

class AbstractClass{
public:
    void TemplateMethod(){  //统一的对外一个接口
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
protected:
    virtual void PrimitiveOperation1(){  //原始操作1
        std::cout << "Default Operation1\n";
    }
    virtual void PrimitiveOperation2(){  //原始操作2
        std::cout << "Default Operation2\n";
    }
};

class ConcreteClassA: public AbstractClass{
protected:
    //重载方法1和2
    virtual void PrimitiveOperation1(){
        std::cout << "ConcreteA Operation1\n";
    }
    virtual void PrimitiveOperation2(){
        std::cout << "ConcreteA Operation2\n";
    }
};

class ConcreteClassB: public AbstractClass{
protected:
    virtual void PrimitiveOperation1(){
        std::cout << "ConcreteB Operation1\n";
    }
    virtual void PrimitiveOperation2(){
        std::cout << "ConcreteB Operation2\n";
    }
};

模板方法特点:

  1. 模板方法模式是通过把不变行为搬移到父类,去除子类中的重复代码来体现它的优势。
  2. 模板方法模式就是提供了一个很好的代码复用平台。
版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

C++设计模式——模板方法模式

前言 离开了自己工作了将近两年的公司,日子不再有了忙碌,可以闲下来,躺在家里的床上,想着以后的路怎么走,说实话,真的很迷茫,从2012年毕业到现在,时间不长,但是学到的东西真的是非常有限,一直从...

[C++设计模式]template 模板方法模式

模板法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 按照《headfirst 设计模式》的例子,煮茶和煮咖啡的算法框架(流程)是一样的,只是有些算法的实现是不一样的,有些是一样的。 ...

设计模式之模板方法模式(C++)

模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以再不改变一个算法的结构即可重新定义该算法的某些特定步骤。通过把不变的行为搬移到基类中,去除了子类的重复代码,提供了...

c++设计模式:模板方法模式(Template Method Pattern)

http://www.cnblogs.com/osyun/archive/2012/02/09/2343999.html 定义:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,...

我所理解的设计模式(C++实现)——模板方法模式(Template Method Pattern)

概述:      我们最近在开发一个支持多种压缩类型文件的解压缩且制作成pdf的一个应用。对我们的架构来说我们需要支持多种压缩文件类型,但却有固定的操作顺序(先解压缩,在读取里面的文件分析、制作pd...

C++设计模式-TemplateMethod模板方法模式

Template模板方法模式 作用:定义一个操作中的算法的骨架。而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 其关键是将通用算法(逻辑)封...

C++设计模式十--TemplatePattern(模板方法模式)

C++ 设计模式 TemplatePattern 模板方法模式

C++设计模式之模板方法模式

临近毕业,很多人都会到人才网发布简历以寻求符合自己要求的岗位。登陆人才网,系统会给我们提供一份统一的模板,我们只需要按照要求填写个人信息、教育背景、工作经历、项目经验等内容就可以了。虽然大家都是使用相...
  • ApeLife
  • ApeLife
  • 2014年08月22日 19:35
  • 755

C++设计模式--模板方法模式

// TemplateMethodPattern.cpp : 定义控制台应用程序的入口点。 //通过此例程了解设计模式里的“模板方法模式” //模板方法模式:定义一个操作中的算法的骨架,而将一些步...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++设计模式浅识模板方法模式
举报原因:
原因补充:

(最多只允许输入30个字)