设计模式C++描述----02.模板(Template)模式(转载)

一. 问题

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

二. 模式

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

三. 代码

  1. //抽象基类,实现了一个模板方法
  2. class AbstractClass
  3. {
  4. public:
  5. virtual ~AbstractClass()
  6. {
  7. }
  8. //模板方法,只在抽象基类中实现
  9. void TemplateMethod()
  10. {
  11. this->PrimitiveOperation1();
  12. this->PrimitiveOperation2();
  13. }
  14. protected:
  15. virtual void PrimitiveOperation1() = 0;
  16. virtual void PrimitiveOperation2() = 0;
  17. AbstractClass()
  18. {
  19. }
  20. };
  21. //具体子类,实现操作的特定细节
  22. class ConcreteClass1:public AbstractClass
  23. {
  24. public:
  25. ConcreteClass1()
  26. {
  27. }
  28. ~ConcreteClass1()
  29. {
  30. }
  31. protected:
  32. void PrimitiveOperation1()
  33. {
  34. cout<<"ConcreteClass1...PrimitiveOperation1"<<endl;
  35. }
  36. void PrimitiveOperation2()
  37. {
  38. cout<<"ConcreteClass1...PrimitiveOperation2"<<endl;
  39. }
  40. };
  41. //具体子类,实现操作的特定细节
  42. class ConcreteClass2:public AbstractClass
  43. {
  44. public:
  45. ConcreteClass2()
  46. {
  47. }
  48. ~ConcreteClass2()
  49. {
  50. }
  51. protected:
  52. void PrimitiveOperation1()
  53. {
  54. cout<<"ConcreteClass2...PrimitiveOperation1"<<endl;
  55. }
  56. void PrimitiveOperation2()
  57. {
  58. cout<<"ConcreteClass2...PrimitiveOperation2"<<endl;
  59. }
  60. };
  61. int main()
  62. {
  63. AbstractClass* p1 = new ConcreteClass1();
  64. AbstractClass* p2 = new ConcreteClass2();
  65. p1->TemplateMethod();
  66. p2->TemplateMethod();
  67. return 0;
  68. }

关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。

原文链接:https://www.cnblogs.com/any91/category/528328.html

最新文章

  1. android--handler
  2. Swift注释
  3. NBOJv2 1034 Salary Inequity(DFS序+线段树区间更新区间(最值)查询)
  4. java基础面试题(转)
  5. 腾讯视频嵌入手机端网站demo - 就像微信文章中一样一样的
  6. &lt;memory&gt; is not a BOMStorage file
  7. linux 下 查看是32位还是64位系统 命令
  8. 小型 Web 页项目打包优化方案
  9. [转] 理解NLP中的卷积&amp;&amp;Pooling
  10. MD5加密算法工具类
  11. VRS——备忘
  12. python五十七课——正则表达式(边界字符)
  13. PT,PX,DPI
  14. EMQ笔记
  15. (转)Python 实现双向链表(图解)
  16. express项目创建步骤
  17. 代码中特殊的注释技术 -- TODO、FIXME和XXX的用处
  18. asp.net core web 本地iis开发
  19. cmd命令行安装,删除Windows证书(certgmr的简单使用)
  20. 【hihocoder1251】Today is a rainy day

热门文章

  1. 网络滴神,TCP!
  2. 转)JVM Internals
  3. Spring学习总结(7)-AOP
  4. c++ 模板类的 友元函数
  5. 【NOIP2015四校联训Day7】 题 题解(Tarjan缩点+DFS)
  6. 打开桌面的Eclipse闪退,打不开
  7. 004_自己尝试go语言中的方法
  8. “随手记”开发记录day10
  9. Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)
  10. html笔记 标签属性、图像和链接、超链接