模板模式(Template Pattern) —— 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

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

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

#include<iostream>
using namespace std; //抽象类 实现总的通用算法框架,算法细节交给子类实现
class Abstact {
public:
virtual ~Abstact(){}
// 将不变的部分(通用的算法框架)在抽象类中实现,而将变化的部分(算法细节)抽象出来交给子类实现。
void TemplateMethod(){
cout<<"TemplateMethod:"<<endl;
this->PrimitiveOperation1();
this->PrimitiveOperation2();
}
protected:
virtual void PrimitiveOperation1()=0;
virtual void PrimitiveOperation2()=0;
Abstact(){}
}; //子类A,实现自己的算法细节
class ConcreteA: public Abstact{
public:
ConcreteA(){}
~ConcreteA(){}
protected:
void PrimitiveOperation1(){
cout<<"A ---> PrimitiveOperation1:"<<endl;
} void PrimitiveOperation2(){
cout<<"A ---> PrimitiveOperation2:"<<endl;
}
}; //子类B,实现自己的算法细节
class ConcreteB: public Abstact{
public:
ConcreteB(){}
~ConcreteB(){}
protected:
void PrimitiveOperation1(){
cout<<"B ---> PrimitiveOperation1:"<<endl;
} void PrimitiveOperation2(){
cout<<"B ---> PrimitiveOperation2:"<<endl;
}
}; int main(){
cout<< "template pattern."<<endl;
Abstact* a = new ConcreteA();
a->TemplateMethod();
Abstact* b = new ConcreteB();
b->TemplateMethod(); delete a;
delete b; return 0;
}

最新文章

  1. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现&ldquo;开发者异常页面&rdquo;
  2. psutil一个基于python的跨平台系统信息跟踪模块
  3. Hibernate第三次测试错题解析
  4. Codeforces Round #274 (Div. 2)
  5. 制作进度条(UISlider)
  6. CentOS 6.7编译安装PHP7
  7. 【USACO 2.3.4】货币系统
  8. G - 密码 kmp、贪心、manachar等等等等
  9. 金蝶KIS专业版替换SXS.dll 遭后门清空数据被修改为【恢复数据联系QQ 735330197,2251434429】解决方法 修复工具。
  10. 文件描述符和exec() close_on_exec
  11. UVa 11747 - Heavy Cycle Edges
  12. innerHTML的使用
  13. 如果需要精确的答案,请避免使用float和double
  14. 下拉列表模仿placeholder效果
  15. spring XML配置参数替代properties文件
  16. SQL Server 定价及授权方式
  17. oracle中索引的使用
  18. T-SQL查询两个日期之间的休息日(周六周日)天数
  19. js Object.create 初探
  20. Windows下Python版本的切换

热门文章

  1. EditText限制输入的几种方式及只显示中文汉字的做法
  2. Nginx 配置操作注意事项
  3. springMVC Controller 参数映射
  4. failure during conversion to COFF:file invalid or corrupt
  5. Flutter BottomNavigationBar 组件
  6. 【转载】 漫谈Code Review的错误实践
  7. Python - Django - 在 CBV 中使用装饰器
  8. PLSQL集合类型的使用总结
  9. HTML布局水平导航条1制作
  10. Ubuntu18安装虚拟机virtualbox