目录

  • 前言
  • 1 继承、封装、多态
  • 2 单件模式
  • 3 外观模式

前言

偶然在网上看到C语言设计模式的文章,觉得很有用,在此开一篇连载,将自己学到的东西给大家展示下,希望对大家有用

1 继承、封装、多态

(1)继承性

typedef struct _parent
{int data_parent;}Parent;typedef struct _Child
{struct _parent parent;int data_child;}Child;

在设计C语言继承性的时候,我们需要做的就是把基础数据放在继承的结构的首位置即可。这样,不管是数据的访问、数据的强转、数据的访问都不会有什么问题。

(2)封装性

struct _Data;typedef  void (*process)(struct _Data* pData);typedef struct _Data
{int value;process pProcess;}Data;

封装性的意义在于,函数和数据是绑在一起的,数据和数据是绑在一起的。这样,我们就可以通过简单的一个结构指针访问到所有的数据,遍历所有的函数。封装性,这是类拥有的属性,当然也是数据结构体拥有的属性。

(3)多态

typedef struct _Play
{void* pData;void (*start_play)(struct _Play* pPlay);
}Play;

多态,就是说用同一的接口代码处理不同的数据。比如说,这里的Play结构就是一个通用的数据结构,我们也不清楚pData是什么数据,start_play是什么处理函数?但是,我们处理的时候只要调用pPlay->start_play(pPlay)就可以了。剩下来的事情我们不需要管,因为不同的接口会有不同的函数去处理,我们只要学会调用就可以了。

2 单件模式

单件模式的技巧就在于类的构造函数是一个私有的函数。但是类的构造函数又是必须创建的?怎么办呢?那就只有动用static函数了。我们看到static里面调用了构造函数,就是这么简单。

typedef struct _DATA
{void* pData;
}DATA;void* get_data()
{static DATA* pData = NULL;if(NULL != pData)return pData;pData = (DATA*)malloc(sizeof(DATA));assert(NULL != pData);return (void*)pData;
}

这个函数可以用在系统加载的时候,申请一次内存,永久不释放;除非系统重启。不能用在内存频繁申请和释放的地方

3 外观模式

类似肯德基的套餐,汉堡薯条是基础接口,将已有的一些基础接口重新组合形成新的接口作为中间层给用户使用。

【C】C语言中的设计模式相关推荐

  1. 【知识分享】C语言中的设计模式——开篇

    前言 从一个普通的码农成为架构师的第一步,就是要从代码搬运转化为有自己一套设计方法.架构设计的基石,就是要拥有一套可信手拈来的设计模式. 在之前一直认为C语言在这一块的设计思想特别稀缺,而事实也是如此 ...

  2. 【知识分享】C语言中的设计模式——命令模式

    背景     命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给 ...

  3. 【知识分享】C语言中的设计模式——解释器

    背景     解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文. 名词释义     解 ...

  4. Ruby中的设计模式

    继续 上 节讲述过的Singleton . Proxy 及 Iterator各模式,本节再来考察几个别的设计模式.下面按顺序来考察 Prototype . Template Method 和 Obse ...

  5. java io使用哪些设计模式_JAVA IO中的设计模式

    在java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式. 在任何一种计算机语言中,输入/输出都是一个很重要的部分.与一般的计算机语言相比,java将输入/输出的功能和使用范畴做了 ...

  6. c语言常用的异常处理,C语言中的异常处理

    一 前言: 异常处理,对于做面向对象开发的开发者来说是再熟悉不过了,例如在C#中有 try { ... } catch( Exception e){...} finally{ ..... } 在C++ ...

  7. 语言中拟合函数 计算aic_Go语言函数深度解析(中)

    上回函数深度解析给大家聊了一些函数的基本知识,不知道还有没有人记得,不记得赶紧回去复习! 他们是 go语言中函数的基本原理 单/多个同/不同类型参数 单/多个同/不同类型返回值 值传递,引用传递 函数 ...

  8. .NET中的设计模式---由吃龙虾想到的

    作者: 倪大虾 发表于 2010-07-18 18:10 原文链接 阅读: 725 评论: 20 今天吃小龙虾的时候忽然想到了以前一个湖北朋友讲的虾的故事.这位朋友是湖北人,据他说在他小时候他们那里很 ...

  9. jdk中的设计模式_JDK中的设计模式

    jdk中的设计模式 Zen的JCG合作伙伴Brian Du Preez 是IT领域的合作伙伴, 在收集JDK中最常见的设计模式方面做得非常出色. 模式列表的确令人印象深刻且很长,因此让我们不再ba不休 ...

最新文章

  1. C++ Primer 读书笔记 - 第十三章
  2. 链表用java实现简单单链表linkedlist
  3. 树层级处理上万条数据优化!
  4. jsonp react 获取返回值_Django+React全栈开发:文章列表
  5. 支付宝的个人捐赠功能
  6. scikit-learn——快速入门
  7. [面试] C++ 语法(一) —— 初始化列表的初始化顺序
  8. 语音识别软件哪个好?好用的语音识别软件盘点
  9. 再造轮子之网易彩票-第一季(IOS 篇 by sixleaves)
  10. python 将txt文件转换为excel_Python学习笔记-Txt文件转Excel文件
  11. 如何在linux下观看需vodplayer播放的电影
  12. ace unlck工具下载_iPhoneX如何解锁ID激活锁
  13. 怎样花两年时间去面试一个人
  14. 一下科技何一:移动视频风口,内容创业者如何飞升?
  15. 用JavaScript实现京东登录页面的用户密码显示或者隐藏功能
  16. windows下使用vscode编写运行以及调试C/C++
  17. 用Python自动生成数据日报!
  18. 《鸟哥的Linux私房菜》精要 持续更新。。。
  19. APP在后台被系统杀死的六种主要原因
  20. Vux Rater赋值问题

热门文章

  1. 电子产品可靠性测试公司/报告/费用/机构
  2. springboot-使用Thymeleaf
  3. Visual Studio 2022 IDE 下载安装与环境配置,C语言/C++集成环境配置,VS2022。详细环境配置教程,最适合写c语言的编译器
  4. ios - 百度地图和高德地图坐标的区别
  5. 【TAMP-S2GCNets】【第一部分】论文学习
  6. 身份证件识别接口编写的JAVA调用示例
  7. L298N 驱动电机与单片机的线路连接图
  8. 《Linux篇》超详细Linux设置静态IP教程
  9. 英伟达 gsync demo NVIDIA 钟摆测试
  10. 电子式预付费电能表对于安全校园建设的意义