【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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语言和设计模式(之模板模式)相关推荐

  1. 设计模式回顾——模板模式(C++)

    文章目录 1 前言 2 什么是模板模式 2.1 模板模式组成 2.2 模板模式UML图 2.3 模板模式作用 3 模板模式优缺点 4 什么地方使用模板模式 5 模板模式实现 6 模板模式与策略模式比较 ...

  2. 【设计模式】模板模式——jdbc案例

    系列文章目录 [设计模式]策略模式--支付案例 [设计模式]适配器模式--登录案例 [设计模式]委派模式--登录案例 文章目录 系列文章目录 前言 一.lol案例 二.jdbc案例 总结 前言 假如开 ...

  3. C++设计模式之四 模板模式

    <TemplateMethod1.h> #include <iostream> #include <string> using namespace std; cla ...

  4. 《设计模式》-模板模式

    玩物丧志啊!!!最近总想着玩,休息,结果又耽误了半个月..唉! 惭愧啊. 今天是设计模式的倒数第二个了.. 虽然前面的 忘得差不多了.不过等看完了 要进行总复习,再复习,再回归,再理解才算完. 模版模 ...

  5. 设计模式之模板模式和工厂模式

    模板模式和工厂模式的类别分类为"交给子类",即两种设计模式都是通过子类来实现具体的功能.主角是子类,而不像上次的适应设计模式,主角是连接器.这种差别着重体现在我们在工业设计中对需求 ...

  6. 设计模式(模板模式,命令模式,备忘录模式)

    目录 模板模式 什么是模板模式? 术语? 什么时候使用模板模式? 模板模式的优点? 模板模式的缺点? 角色? 钩子函数? 注意事项和细节? 什么场景使用模板模式? 案例: 命令模式 什么是命令模式? ...

  7. java解耦的模板模式_Java 设计模式(9) —— 模板模式

    一.模板模式 封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现.模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤. 模板模式 二.示例 泡咖啡与泡茶: 泡咖啡的步骤: 水 ...

  8. java 模板模式_java设计模式之模板模式

    模板模式 模板模式(Template Pattern),定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤.这种类型的设计模式属于 ...

  9. Java设计模式之模板模式【通过LOL选英雄案例】

    初衷 设计模式(Design Pattern)引用百度百科中的一句话,就是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.实际上在我们的实际编码中到处都有设计模式的影子,比如最常用的单例 ...

  10. Python设计模式:模板模式

    设计模式十七:模板模式 什么是模板模式 编写优秀代码的一个要素是避免冗余: 模式关注的是消除代码冗余: 无需改变算法结构就能重新定义一个算法的某些部分. 使用场景 发现结构相近的算法中有重复代码,则可 ...

最新文章

  1. tomcat安装及虚拟web主机
  2. rabbitmq 在centos下的安装
  3. [蓝桥杯2016初赛]冰雹数-模拟
  4. 【MATLAB】Parzen窗与K近邻算法原理与代码详解
  5. 【英语学习】【医学】Unit 08 The Cardiovascular System
  6. Moodle插件开发大全
  7. Apache Hive 建表操作的简单描述
  8. 安装mysql 错误重新安装
  9. Navicat for Mysql 如何备份数据库
  10. 超全的 Python 可视化教程,收藏
  11. 企业级业务架构设计理论与方法
  12. 12月大学计算机二级考试时间,2020年12月计算机二级考试报名时间及考试安排
  13. 这些APP专注于大众的生活,致远互联专注于他们的管理
  14. 不要太急于求成了。放慢脚步。
  15. 2020年,不可错过的技术圈十大“翻车”事件
  16. bzoj 1814 Fornula 1
  17. PHP利用百度语音接口,实现文字图文转语音播放
  18. windows下,查看apk的包名、以及查找appActivity(aapt命令)
  19. ESP8266用点灯app接入小爱同学
  20. 电脑ftp服务器信息,电脑上的ftp信息服务器地址

热门文章

  1. c语言:使用main函数的参数,实现一个整数计算器
  2. 124第十四章—权限的配置
  3. cakephp2.0 Utility class 简介
  4. 02 ARM11 时钟初始化后的跑马灯程序
  5. HTML 去调table表单里面td之间的间距
  6. MySQL--流程控制
  7. 云计算中的地域和可用区概念
  8. ssh整合,明明已经导入包,却总是有很多ClassNotFoundException
  9. 【C11】complex
  10. Visual Stdio平台工具集以及配置