C++设计模式之四 模板模式
《TemplateMethod1.h》
#include <iostream>
#include <string>
using namespace std;
class A{
public:
A(){};
virtual ~A(){};
void Method();
protected:
virtual void b() = 0;
virtual void c() = 0;
};
class B: public A{
public:
B(){};
virtual ~B(){};
protected:
void c();
void b();
};
class C: public A{
public:
C(){};
virtual ~C(){};
protected:
void b();
void c();
};
《TemplateMethod1.cpp》
include "stdafx.h"
#include "TemplateMethod1.h"
void A::Method(){
this->b();
this->c();
}
void B::b(){
cout << "B::b()" <<endl;
}
void B::c(){
cout << "B::c()" <<endl;
}
void C::b(){
cout << "C::b()" <<endl;
}
void C::c(){
cout << "C::c()" <<endl;
}
int main(int argc, char* argv[])
{
A* t = new B;
A* t1 = new C;
t->Method();
t1->Method();
return 0;
}
做一个简单的实现,具体了解了模板模式的核心主要是:将算法接口封装在抽象接口类中,算法实现放在派生类中实现。
工作中经常这么设计,原来也属设计模式中的一种。
C++设计模式之四 模板模式相关推荐
- 设计模式回顾——模板模式(C++)
文章目录 1 前言 2 什么是模板模式 2.1 模板模式组成 2.2 模板模式UML图 2.3 模板模式作用 3 模板模式优缺点 4 什么地方使用模板模式 5 模板模式实现 6 模板模式与策略模式比较 ...
- 《设计模式》-模板模式
玩物丧志啊!!!最近总想着玩,休息,结果又耽误了半个月..唉! 惭愧啊. 今天是设计模式的倒数第二个了.. 虽然前面的 忘得差不多了.不过等看完了 要进行总复习,再复习,再回归,再理解才算完. 模版模 ...
- 【设计模式】模板模式——jdbc案例
系列文章目录 [设计模式]策略模式--支付案例 [设计模式]适配器模式--登录案例 [设计模式]委派模式--登录案例 文章目录 系列文章目录 前言 一.lol案例 二.jdbc案例 总结 前言 假如开 ...
- 设计模式之模板模式和工厂模式
模板模式和工厂模式的类别分类为"交给子类",即两种设计模式都是通过子类来实现具体的功能.主角是子类,而不像上次的适应设计模式,主角是连接器.这种差别着重体现在我们在工业设计中对需求 ...
- 设计模式(模板模式,命令模式,备忘录模式)
目录 模板模式 什么是模板模式? 术语? 什么时候使用模板模式? 模板模式的优点? 模板模式的缺点? 角色? 钩子函数? 注意事项和细节? 什么场景使用模板模式? 案例: 命令模式 什么是命令模式? ...
- java解耦的模板模式_Java 设计模式(9) —— 模板模式
一.模板模式 封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现.模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤. 模板模式 二.示例 泡咖啡与泡茶: 泡咖啡的步骤: 水 ...
- java 模板模式_java设计模式之模板模式
模板模式 模板模式(Template Pattern),定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤.这种类型的设计模式属于 ...
- Java设计模式之模板模式【通过LOL选英雄案例】
初衷 设计模式(Design Pattern)引用百度百科中的一句话,就是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.实际上在我们的实际编码中到处都有设计模式的影子,比如最常用的单例 ...
- Python设计模式:模板模式
设计模式十七:模板模式 什么是模板模式 编写优秀代码的一个要素是避免冗余: 模式关注的是消除代码冗余: 无需改变算法结构就能重新定义一个算法的某些部分. 使用场景 发现结构相近的算法中有重复代码,则可 ...
最新文章
- 自己做站点(二) 20块钱搞定一个企业站:域名amp;空间申请
- hadoop报错:WARN mapred.JobClient: Error reading task outputNo route to host
- mysql数据库没有密码_MySQL用户数据库没有密码列-在OSX上安装MySQL
- mysql数据聚合技术_Mysql 去重 聚合
- mysql重做日志与binlog日志区别_【135期】谈谈MySQL中的重做日志,回滚日志,以及二进制日志的区别及各自作用...
- svn回退到上一个版本_Git实用教程(一) | 为什么需要版本控制?(以嵌入式项目开发为例)...
- 删除字符串中重复的字符
- Linux内核驱动之主次编号
- Java反编译工具XJad使用注意事项
- matlab菲涅尔衍射光强分布,矩孔菲涅耳衍射的光强分布.pdf
- 【嵌入式模块】再探ESP8266,保姆级教程
- COAP协议全面分析
- PreparedStatement.addbatch()的使用
- Android 音乐播放器SD卡本地播放器实现
- vue之使用vue-cli搭建SPA项目
- 全球与中国矿物加工工程市场深度研究分析报告
- 网上订餐管理系统的设计与实现
- ffmpeg配置H264
- 创客教室功能展示的意义
- TCP/IP之四书五经
热门文章
- centos 没有nmtui命令_Linux free 命令
- java解析json数组对象_JAVA中快速解析JSON对象里包含的JSON数组
- spring 基于xml方式配置aop
- python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小
- 【Immutable】拷贝与JSON.parse(JSON.stringify()),深度比较相等与underscore.isEqual(),性能比较...
- Qt 常用类——QStandardItemModel
- Unknown storage engine 'InnoDB'
- Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
- 把东西从学校搬回来了