C语言和设计模式(之模板模式)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
模板对于学习C++的同学,其实并不陌生。函数有模板函数,类也有模板类。那么这个模板模式是个什么情况?我们可以思考一下,模板的本质是什么。比如说,现在我们需要编写一个简单的比较模板函数。
template <typename type>
int compare (type a, type b)
{return a > b ? 1 : 0;
}
模板函数提示我们,只要比较的逻辑是确定的,那么不管是什么数据类型,都会得到一个相应的结果。固然,这个比较的流程比较简单,即使没有采用模板函数也没有关系。但是,要是需要拆分的步骤很多,那么又该怎么办呢?如果相通了这个问题,那么也就明白了什么是template模式。
比方说,现在我们需要设计一个流程。这个流程有很多小的步骤完成。然而,其中每一个步骤的方法是多种多样的,我们可以很多选择。但是,所有步骤构成的逻辑是唯一的,那么我们该怎么办呢?其实也简单。那就是在基类中除了流程函数外,其他的步骤函数全部设置为virtual函数即可。
class basic
{
public:void basic() {}virtual ~basic() {}virtual void step1() {}virtual void step2() {}void process(){step1();step2();}
};
basic的类说明了基本的流程process是唯一的,所以我们要做的就是对step1和step2进行改写。
class data_A : public basic
{
public:data_A() {}~data_A() {}void step1() {printf("step 1 in data_A!\n");}void step2(){printf("step 2 in data_A!\n");}
};
所以,按照我个人的理解,这里的template主要是一种流程上的统一,细节实现上的分离。明白了这个思想,那么用C语言来描述template模式就不是什么难事了。
typedef struct _Basic
{void* pData;void (*step1) (struct _Basic* pBasic);void (*step2) (struct _Basic* pBasic);void (*process) (struct _Basic* pBasic);
}Basic;
因为在C++中process函数是直接继承的,C语言下面没有这个机制。所以,对于每一个process来说,process函数都是唯一的,但是我们每一次操作的时候还是要去复制一遍函数指针。而step1和step2是不同的,所以各种方法可以用来灵活修改自己的处理逻辑,没有问题。
void process(struct _Basic* pBasic)
{pBasic->step1(pBasic);pBasic->step2(pBasic);
}
C语言和设计模式(之模板模式)相关推荐
- 设计模式回顾——模板模式(C++)
文章目录 1 前言 2 什么是模板模式 2.1 模板模式组成 2.2 模板模式UML图 2.3 模板模式作用 3 模板模式优缺点 4 什么地方使用模板模式 5 模板模式实现 6 模板模式与策略模式比较 ...
- 【设计模式】模板模式——jdbc案例
系列文章目录 [设计模式]策略模式--支付案例 [设计模式]适配器模式--登录案例 [设计模式]委派模式--登录案例 文章目录 系列文章目录 前言 一.lol案例 二.jdbc案例 总结 前言 假如开 ...
- C++设计模式之四 模板模式
<TemplateMethod1.h> #include <iostream> #include <string> using namespace std; cla ...
- 《设计模式》-模板模式
玩物丧志啊!!!最近总想着玩,休息,结果又耽误了半个月..唉! 惭愧啊. 今天是设计模式的倒数第二个了.. 虽然前面的 忘得差不多了.不过等看完了 要进行总复习,再复习,再回归,再理解才算完. 模版模 ...
- 设计模式之模板模式和工厂模式
模板模式和工厂模式的类别分类为"交给子类",即两种设计模式都是通过子类来实现具体的功能.主角是子类,而不像上次的适应设计模式,主角是连接器.这种差别着重体现在我们在工业设计中对需求 ...
- 设计模式(模板模式,命令模式,备忘录模式)
目录 模板模式 什么是模板模式? 术语? 什么时候使用模板模式? 模板模式的优点? 模板模式的缺点? 角色? 钩子函数? 注意事项和细节? 什么场景使用模板模式? 案例: 命令模式 什么是命令模式? ...
- java解耦的模板模式_Java 设计模式(9) —— 模板模式
一.模板模式 封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现.模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤. 模板模式 二.示例 泡咖啡与泡茶: 泡咖啡的步骤: 水 ...
- java 模板模式_java设计模式之模板模式
模板模式 模板模式(Template Pattern),定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤.这种类型的设计模式属于 ...
- Java设计模式之模板模式【通过LOL选英雄案例】
初衷 设计模式(Design Pattern)引用百度百科中的一句话,就是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.实际上在我们的实际编码中到处都有设计模式的影子,比如最常用的单例 ...
- Python设计模式:模板模式
设计模式十七:模板模式 什么是模板模式 编写优秀代码的一个要素是避免冗余: 模式关注的是消除代码冗余: 无需改变算法结构就能重新定义一个算法的某些部分. 使用场景 发现结构相近的算法中有重复代码,则可 ...
最新文章
- tomcat安装及虚拟web主机
- rabbitmq 在centos下的安装
- [蓝桥杯2016初赛]冰雹数-模拟
- 【MATLAB】Parzen窗与K近邻算法原理与代码详解
- 【英语学习】【医学】Unit 08 The Cardiovascular System
- Moodle插件开发大全
- Apache Hive 建表操作的简单描述
- 安装mysql 错误重新安装
- Navicat for Mysql 如何备份数据库
- 超全的 Python 可视化教程,收藏
- 企业级业务架构设计理论与方法
- 12月大学计算机二级考试时间,2020年12月计算机二级考试报名时间及考试安排
- 这些APP专注于大众的生活,致远互联专注于他们的管理
- 不要太急于求成了。放慢脚步。
- 2020年,不可错过的技术圈十大“翻车”事件
- bzoj 1814 Fornula 1
- PHP利用百度语音接口,实现文字图文转语音播放
- windows下,查看apk的包名、以及查找appActivity(aapt命令)
- ESP8266用点灯app接入小爱同学
- 电脑ftp服务器信息,电脑上的ftp信息服务器地址