一. 问题

在面向对象系统的分析与设计过程中常常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,可是逻辑(算法)的框架(或通用的应用算法)是同样的。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. }

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

C++设计模式实现--模板(Template)模式的更多相关文章

  1. 设计模式C++模板(Template)模式

    设计模式C++描述----02.模板(Template)模式(转载) 一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现, ...

  2. [设计模式2]--模板(Template)模式

    原文出处:http://blog.csdn.net/lwbeyond/article/details/7517679 一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务 ...

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

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

  4. Java设计模式(13)模板模式(Template模式)

    Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: pu ...

  5. C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】

    一.引言 “结构型”的设计模式已经写完了,从今天我们开始讲“行为型”设计模式.现在我们开始讲[行为型]设计模式的第一个模式,该模式是[模板方法],英文名称是:Template Method Patte ...

  6. 设计模式之模板模式(PHP实现)

    github地址:https://github.com/ZQCard/design_pattern * 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板. ...

  7. 图解Java设计模式之模板模式

    图解Java设计模式之模板模式 豆浆制作问题 模板方法模式基本介绍 模板方法模式原理类图 模板方法模式解决豆浆制作问题 模板方法模式的钩子方法 模板方法模式在Spring框架中的源码分析 模板方法模式 ...

  8. python设计模式之模板模式

    python设计模式之模板模式 编写优秀代码的一个要素是避免冗余.在面向对象编程中,方法和函数是我们用来避免编写冗余代码的重要工具. 现实中,我们没法始终写出100%通用的代码.许多算法都有一些(但并 ...

  9. 13.java设计模式之模板模式

    基本需求: 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材.浸泡和放到豆浆机打碎这几个步骤对于制作每种口味 ...

随机推荐

  1. python sys.argv[]的用法简明解释

    sys模块中文参考文档:http://xukaizijian.blog.163.com/blog/static/170433119201111625428624/ sys.argv[]: 「argv」 ...

  2. pkuwc2019自闭记

    窝自闭了... 所以这篇\(blog\)咕咕咕了.

  3. WEB架构师成长之路 三

    Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...

  4. 慎用 new、delete

    C++ STL 为我们提供了一套容器.在多数情况下,这套容器已足够让我们使用.所以,需要我们自己去用 new/new []/delete/delete [] 来管理内存的必要性并不是很大.此外,自己管 ...

  5. Java中的Runnable、Callable、Future、FutureTask的区别

    本文转载自:http://blog.csdn.net/bboyfeiyu/article/details/24851847 Runnable 其中Runnable应该是我们最熟悉的接口,它只有一个ru ...

  6. bzoj 2844 子集异或和名次

    感谢: http://blog.sina.cn/dpool/blog/s/blog_76f6777d0101d0mr.html 的讲解(特别是2^(n-m)的说明). /*************** ...

  7. 细说React(一)

    React 是近期非常热门的一个前端开发框架. 这篇文章将介绍如何使用 React 来创建用户界面,希望能够起到抛砖引玉的效果. "React,  A JAVASCRIPT LIBRARY ...

  8. JAVA读入挂

    队友扒的uwi的读入挂,非常强,再也不用担心java比C++慢了-- import java.util.*; import java.math.*; import java.io.ByteArrayI ...

  9. SMACH(五)----用户数据UserData类和重映射Remapper类的原理和例子

    用户数据UserData类和重映射Remapper类包含在smach中的user_data.py文件中实现,该博文主要介绍其原理和例子 UserData主要用于状态之间的数据传递,包括数据的输入inp ...

  10. 向USB设备发送SCSI命令

    http://bbs3.driverdevelop.com/simple/?t84347.html { BOOL status = ; DWORD accessMode = , shareMode = ...