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

本文共 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的核心作用

发表评论

最新留言

不错!
[***.172.111.71]2022年05月22日 09时22分46秒

关于作者

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

最新文章

SDJZU-FatMouse' Trade 2022-02-02
hdu-Hero 2022-02-02
hdu-ASCII码排序 2019-11-30 02:57:56
hdu-字符串统计 2019-11-30 02:57:57
hdu-C语言合法标识符 2019-11-30 02:57:57
hdu-查找最大元素 2019-11-30 02:57:57
hdu1087---Super Jumping! Jumping! Jumping! 2019-11-30 02:57:54
uva10534---Wavio Sequence 2019-11-30 02:57:54
JVM原理 2019-11-30 02:57:55
Spring源码解析 2019-11-30 02:57:55
left join加上where条件的困惑,(left join 无用 / 无效 ) 2019-11-30 02:57:55
swagger ui和spring boot集成生成api文档 2019-11-30 02:57:55
hdu1683--Colour sequence 2019-11-30 02:57:53
hdu1686--Oulipo 2019-11-30 02:57:53
poj3356---AGTC 2019-11-30 02:57:53
uva111---History Grading 2019-11-30 02:57:53
LCS算法讲解 2019-11-30 02:57:53
codeforces6A--Triangle 2019-11-30 02:57:54
hdu1677--Nested Dolls(贪心+LIS) 2019-11-30 02:57:54
sdjzu---8 2019-11-30 02:57:51