设计模式之七:模板方法模式(Template Method)
2015-06-05 23:33
239 查看
模板方法模式:
定义了一个算法的基本操作骨架,并将算法的一些步骤延迟到子类中来实现。
模板方法模式让子类在不更改算法结构的前提下可以重新定义算法的一些步骤。
UML图:
主要包括:
AbstractClass:定义了一个子类需要重新实现的算法的某些步骤primitiveOperation,实现了一个模板方法,这个模板方法调用定义于AbstractClass和重新定义与子类中的某些函数。
ConcreteClass:实现了primitiveOperation以完成算法中某些特定的步骤。
C++代码如下:
执行输出:
其实这个设计模式经常用到,基本上用到继承和多态这两个性质的话都会和这个设计模式打交道。
定义了一个算法的基本操作骨架,并将算法的一些步骤延迟到子类中来实现。
模板方法模式让子类在不更改算法结构的前提下可以重新定义算法的一些步骤。
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
UML图:
主要包括:
AbstractClass:定义了一个子类需要重新实现的算法的某些步骤primitiveOperation,实现了一个模板方法,这个模板方法调用定义于AbstractClass和重新定义与子类中的某些函数。
ConcreteClass:实现了primitiveOperation以完成算法中某些特定的步骤。
C++代码如下:
#include <iostream> class AbstractClass { public: void templateMethod() { std::cout<<"before primitiveOperation1"<<std::endl; primitiveOperation1(); std::cout<<"after primitiveOperation1"<<std::endl; std::cout<<"before primitiveOpreation2"<<std::endl; primitiveOperation2(); std::cout<<"after primitiveOperation2"<<std::endl; } virtual void primitiveOperation1()=0; virtual void primitiveOperation2()=0; }; class ConcreteClass :public AbstractClass { public: void primitiveOperation1() { std::cout<<"ConcreteClass primitiveOperation1"<<std::endl; } void primitiveOperation2() { std::cout<<"ConcreteClass primitiveOperation2"<<std::endl; } }; int main() { AbstractClass * cc=new ConcreteClass; cc->templateMethod(); return 0; }
执行输出:
其实这个设计模式经常用到,基本上用到继承和多态这两个性质的话都会和这个设计模式打交道。
相关文章推荐
- JS多维数组转一维
- 带关闭按钮的跟随窗口移动对联广告代码
- 一个存在重复数字的正整数数列,每个数都不超过32,找出其中所有重复的数字
- 我是好人 【欧几里得定理的性质】
- 逆元
- 有趣的语境不对等
- 汇编指令汇总
- Android抽象布局——include、merge 、ViewStub .
- 第十四周 项目二:用文件保存的学生名单
- 容斥原理
- UVA 11029 【快速幂】
- git 在win7上安装获取linux(centos)上面的remote repository的代码
- c语言循环链表的问题
- 关于头文件和库文件
- 谈谈WEB开发中的苦大难字符集问题
- 最大流SAP模板(邻接矩阵)
- POJ 1273 DRAINAGE DITCHES【最大流】
- MultiWarhead 帮助文档设计
- Android学习日记(9)
- 最大流SAP -邻接表模板