文章目录

  • C语言实现设计模式—模板模式
    • 模板模式介绍
    • UML用例说明
    • 实际场景使用
      • 框架结构[共用框架]—通用的串口协议分析函数
      • 不同实现—数据类型区别

C语言实现设计模式—模板模式

模板模式介绍

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

优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。

UML用例说明

实际场景使用

单片机的串口收到不同对象数据类型,随着与每种对象的串口交互协议都不一样,会对每个串口协议都单独进行拆解分析,这样的架构的基础上程序会越写越多,随着对象的数据类型增加,这样的程序会越来越臃肿,不好维护,不符合程序设计开闭原则。

改进方法:

写一个通用的串口协议解析函数,这样即使后期需求更改,也不会影响整体。

框架结构[共用框架]—通用的串口协议分析函数

uint32_t rz_public_communication_parse(uint8_t *recBuf,uint16_t recLen, rz_uart_dev_type_t mode)
{uint16_t len = 0;uint16_t i = 0;uint8_t sum=0;if (true != uart_data_type_check(recBuf,recLen,mode)) {return 0;}/* check : recvive len  */len = recBuf[4] + recBuf[5] * 256;if (len != recLen) {rt_kprintf("receive length error! len(%d) != recLen(%d) \r\n",len,recLen);return 0;}/* check : sum   */for (i = 0; i < len; i ++) {sum = sum + recBuf[i];}if (0 != sum) {rt_kprintf("receive check sum error,checksum = %d\r\n",sum);return 0;}return 1;}

不同实现—数据类型区别

这里以四种不同的串口协议数据分析,后期业务增加也不会改成模块程序。

static bool (*uart_data_type_check_cbs[UART_DEV_TYPE_MAX])(uint8_t *pbbuf, uint16_t len) = {uart_data_type_debug_check,uart_data_type_rh1200_check,uart_data_type_rh124_check,uart_data_type_rh172_check,
};static bool uart_data_type_check(uint8_t *recBuf, uint16_t recLen,rz_uart_dev_type_t type)
{if (NULL == uart_data_type_check_cbs[type]) {return true;}return uart_data_type_check_cbs[type](recBuf, recLen);}

C语言实现设计模式—模板模式相关推荐

  1. 12. 星际争霸之php设计模式--模板模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  2. Java设计模式-模板模式

    Java设计模式-模板模式 什么是模板模式? 模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义模板,我们的剩余工作就是对其进行充实. ...

  3. Java设计模式—模板模式(Template)

    模板模式 业务需求 编写豆浆制作程序 选材-添加配料-浸泡-豆浆机打碎 选材.浸泡.打碎这几步对于制作不同豆浆都是一样的 比较简单,这里不再使用传统方法,直接上设计模式 模板模式基本介绍 模板模式,在 ...

  4. 【设计模式】Java设计模式 - 模板模式

    [设计模式]Java设计模式 - 模板模式

  5. 16、Python与设计模式--模板模式

    一.股票查询客户端 投资股票是种常见的理财方式,我国股民越来越多,实时查询股票的需求也越来越大.今天,我们通过一个简单的股票查询客户端来认识一种简单的设计模式:模板模式. 根据股票代码来查询股价分为如 ...

  6. PHP设计模式——模板模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的 ...

  7. 设计模式 模板模式和策略模式

    模板模式和策略模式,有相识的地方,都是通过对钩子方法的调用,来实现一个业务的完整逻辑. 所以这里我将两种模式放在一起介绍,比较容易加深对这两种模式的理解. 模板模式 在模板模式(Template Pa ...

  8. java设计模式————模板模式,手撸一个JDBCTemplate

    模板模式(Template Method Pattern) 定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现. 模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤. 属于行为 ...

  9. 一文搞懂设计模式--模板模式

    Hi,大家好.今年的天气实在是太热了,七月份的厦门晒得我觉得身上冒出了烤肉香,不知道各位是否安好,但是在再热的天气也不能阻止我们学习的热情(doge).今天的主题是模板(Template Method ...

最新文章

  1. Ubuntu 12.04 安装图形界面
  2. php遍历指定目录中的内容2
  3. php改密后joomla无法登陆,恢复丢失的Joomla密码的最常用方法
  4. 对python装饰器几种常见方式的使用与理解
  5. 游戏用计算机配置表显卡,攒机的知识盲区 以及显卡配置推荐详解
  6. 分布式事务中的2PC
  7. linux 卸载sphinx,sphinx管理脚本,实现sphinx启动、关闭、重启、生成索引功能 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
  8. 精通ASP.NET MVC ——模型绑定
  9. 在WPF 4.5中跨线程更新集合
  10. Java基础知识拾遗—集合篇之List
  11. 网络安全基础相关概念
  12. 内蒙古等保测评机构项目测评收费价格标准参考
  13. hover出不来是什么原因css,关于css的:hover失效问题
  14. Java的小tips(1) ------关于“Java :找不到符号”类问题的解读
  15. 美团3年阿里4年,我的坎坷进阶之路
  16. CAD版本转换,电脑端如何转换CAD图纸格式?
  17. 20210514:廉价机械键盘学习
  18. Excel删除区域内的空白格
  19. Jsp(二)——简单的Jsp程序
  20. 微软开放技术云浪生:微软开源.NET是民心之所向

热门文章

  1. Silverlight之美
  2. Excel图表制作难?这款excel图表工具插件免费用
  3. GoogleServices之GooglePlayService Accessing Google APIS(访问谷歌APIS)官方文档翻译
  4. COM:病原体之外-微生物组与植物免疫系统的相互作用
  5. win7待机时间设置,睡眠时间设置
  6. amd cpu 安卓模拟器_Android模拟器稳定版终于支持AMD处理器 开发者喜极而泣
  7. 安装配置无线 SONOS HIFI 系统 (完整版)
  8. 合同没到期辞退员工赔偿多少金额
  9. java读取xls表格(提供免费下载jar包)
  10. LVGL lv_event事件