C++设计模式-模板方法模式
发布日期:2021-06-30 11:01:49
浏览次数:2
分类:技术文章
本文共 2134 字,大约阅读时间需要 7 分钟。
目录
基本概念
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
结构图如下(此图来自大话设计模式):
模板方法模式是通过把不变行为搬移到超类中,去除子类中的重复代码来提现他的优势。
模板方法模式提供了一个很好的代码复用。
当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复不变行为的纠缠。
例子和实例
程序运行截图如下:
源码如下:
Head.h
#ifndef HEAD_H#define HEAD_Hclass Fundamental{public: virtual void primitiveOperation1(); virtual void primitiveOperation2(); void templateMethod(); virtual ~Fundamental();};class ConcreteClassA: public Fundamental{public: void primitiveOperation1(); void primitiveOperation2(); virtual ~ConcreteClassA();};class ConcreteClassB: public Fundamental{public: void primitiveOperation1(); void primitiveOperation2(); virtual ~ConcreteClassB();};#endif //HEAD_H
Head.cpp
#include "Head.h"#include#include using namespace std;void Fundamental::primitiveOperation1(){ cout << "Fundamental::primitiveOperation1()" << endl;}void Fundamental::primitiveOperation2(){ cout << "Fundamental::primitiveOperation1()" << endl;}void Fundamental::templateMethod(){ this->primitiveOperation1(); this->primitiveOperation2();}Fundamental::~Fundamental(){ cout << "Fundamental::~Fundamental()" << endl;}void ConcreteClassA::primitiveOperation1(){ cout << "ConcreteClassA::primitiveOperation1()" << endl;}void ConcreteClassA::primitiveOperation2(){ cout << "ConcreteClassA::primitiveOperation1()" << endl;}ConcreteClassA::~ConcreteClassA(){ cout << "ConcreteClassA::~ConcreteClassA()" << endl;}void ConcreteClassB::primitiveOperation1(){ cout << "ConcreteClassB::primitiveOperation1()" << endl;}void ConcreteClassB::primitiveOperation2(){ cout << "ConcreteClassB::primitiveOperation2()" << endl;}ConcreteClassB::~ConcreteClassB(){ cout << "ConcreteClassB::~ConcreteClassB()" << endl;}
main.cpp
#include "Head.h"#include#include using namespace std;int main(int *argc, int *argv[]){ Fundamental *fundamental = new ConcreteClassA; fundamental->templateMethod(); delete fundamental; cout << "-------------- 华丽的分割线 --------------" << endl; Fundamental *concrete = new ConcreteClassB; concrete->templateMethod(); delete concrete; getchar(); return 0;}
转载地址:https://it1995.blog.csdn.net/article/details/91990149 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月25日 22时27分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android Bitmap透明背景
2019-04-30
android画布局部矩形擦除
2019-04-30
ADB命令与调试文件安装拷贝
2019-04-30
Android日志创建应用与添加位置服务
2019-04-30
Android MP3播放(web)
2019-04-30
Android之资源使用
2019-04-30
专利挖掘文章研读笔记
2019-04-30
Java DataType数据类型
2019-04-30
路似长非长,似短非短,只是时常我们还迷茫在大海之中
2019-04-30
Android设置字体颜色
2019-04-30
Qt构建静态库动态库
2019-04-30
Andoid Style资源应用
2019-04-30
RecyclerView(ListView) 画网格
2019-04-30
解决QT中中文字符乱码问题
2019-04-30
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start': (.text+0x18): undefined
2019-04-30
Redhat5.6下mysql的安装和使用
2019-04-30
libBasicUsageEnvironment.so.0: cannot restore segment prot after reloc: Permission denied
2019-04-30
程序员的成长之路
2019-04-30
linux下CPU温度监测
2019-04-30
java数组查找元素索引,无需排序
2019-04-30