C++设计模式实现--模板(Template)模式
发布日期:2021-08-30 19:27:45 浏览次数:12 分类:技术文章

本文共 1263 字,大约阅读时间需要 4 分钟。

一. 问题

在面向对象系统的分析与设计过程中常常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,可是逻辑(算法)的框架(或通用的应用算法)是同样的。Template提供了这样的情况的一个实现框架。

二. 模式

Template 模式是採用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节

三. 代码

[cpp] 
  1. //抽象基类,实现了一个模板方法  
  2. class AbstractClass  
  3. {  
  4. public:  
  5.     virtual ~AbstractClass()  
  6.     {  
  7.     }  
  8.   
  9.         //模板方法,仅仅在抽象基类中实现  
  10.     void TemplateMethod()  
  11.     {  
  12.         this->PrimitiveOperation1();  
  13.         this->PrimitiveOperation2();  
  14.     }  
  15.   
  16. protected:  
  17.     virtual void PrimitiveOperation1() = 0;  
  18.   
  19.     virtual void PrimitiveOperation2() = 0;  
  20.   
  21.     AbstractClass()  
  22.     {  
  23.     }  
  24. };  
  25.   
  26. //详细子类,实现操作的特定细节  
  27. class ConcreteClass1:public AbstractClass  
  28. {  
  29. public:  
  30.     ConcreteClass1()  
  31.     {  
  32.     }  
  33.   
  34.     ~ConcreteClass1()  
  35.     {  
  36.     }  
  37.   
  38. protected:  
  39.     void PrimitiveOperation1()  
  40.     {  
  41.         cout<<"ConcreteClass1...PrimitiveOperation1"<<endl;  
  42.     }  
  43.   
  44.     void PrimitiveOperation2()  
  45.     {  
  46.         cout<<"ConcreteClass1...PrimitiveOperation2"<<endl;  
  47.     }  
  48. };  
  49.   
  50. //详细子类,实现操作的特定细节  
  51. class ConcreteClass2:public AbstractClass  
  52. {  
  53. public:  
  54.     ConcreteClass2()   
  55.     {  
  56.     }  
  57.   
  58.     ~ConcreteClass2()  
  59.     {  
  60.     }  
  61.   
  62. protected:  
  63.     void PrimitiveOperation1()  
  64.     {  
  65.         cout<<"ConcreteClass2...PrimitiveOperation1"<<endl;  
  66.     }  
  67.   
  68.     void PrimitiveOperation2()  
  69.     {  
  70.         cout<<"ConcreteClass2...PrimitiveOperation2"<<endl;  
  71.     }  
  72. };  
  73.   
  74.   
  75. int main()  
  76. {  
  77.     AbstractClass* p1 = new ConcreteClass1();  
  78.     AbstractClass* p2 = new ConcreteClass2();  
  79.       
  80.     p1->TemplateMethod();  
  81.     p2->TemplateMethod();  
  82.       
  83.     return 0;  
  84. }  
关键点
就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。

转载地址:https://blog.csdn.net/weixin_34049948/article/details/85880906 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Hive和Sqoop测试数据
下一篇:Mycat和MySQL的差别——Mycat的核心作用

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月02日 13时43分59秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python numpy 函数详解_python使用numpy中的size()函数实例用法详解 2021-06-24
java spring上传文件_Java Spring文件上传,Java文件上传,Java通用文件上传 2021-06-24
linux 模拟键盘输入到进程,Linux 下模拟键盘输入 2021-06-24
linux服务器上已安装R 用户下载R包,R语言安装R package的2种方法 2021-06-24
linux 7 磁盘空间太小,Linux下磁盘保留空间的调整,解决df看到的空间和实际磁盘大小不一致的问题... 2021-06-24
linux下mysql 备份方法,Linux下mysql数据库备份方法小结 2021-06-24
bootstrap 页面垂直居中_iframe中如何让layer提示框显示在垂直居中的位置 2021-06-24
肺部ct重建_胸片检查容易漏诊肺癌,去年正常今年晚期常发生,体检一定要做CT... 2021-06-24
3dmax如何拆分模型_3D建模大佬如何制作出惊艳四方的游戏建模,看完这篇文章我知道了... 2021-06-24
x86so文件装换成arm64位_64位系统正式发布说明及介绍!! 2021-06-24
for循环中取出最大最小 累加_LeetCode之长度最小的子数组 2021-06-24
如何打开老公人脸识别_【话题】南宁已有小区启用人脸识别门禁,有人点赞有人忧... 2021-06-24
makex机器人程序_机器人教育为相城青少年叩开科学世界大门 2021-06-24
一寸照纯红色底图片_Ella陈嘉桦也是“时髦精”,穿玫红色西装配拼色半身裙,高级洋气... 2021-06-24
米哈游客户端笔试题_Garena校招 游戏客户端开发通关面经 2021-06-24
airpodspro没有弹窗_使用AirPods Pro一天的主观感受 2021-06-24
创建物化视图commit_视图及范式 2021-06-24
函数传参字典_Python新手上车17:函数传递任意多个参数 2021-06-24
去掉数组最后一个元素_【一天一大 lee】在排序数组中查找元素的第一个和最后一个位置 (难度:中等) Day20201201... 2021-06-24
秦九韶算法递推公式_算法讲解之复杂度分析 2021-06-24