【摘要】 软件编写模式是开发过程中的重要经验总结。灵活运用设计模式,一方面利于我们编写高质量的代码,另一方面也方便我们对代码进行维护。

设计模式最开始是针对面向对象语言提出的。经典的书如《设计模式:可复用面向对象软件的基础》,《java与模式》。《设计模式》的作者俗称”GOF”, gang of four,书中从面向对象的设计中精选出23个设计模式,这个也成了后来设计模式的范例。

C语言设计模式的书非常少,目前没有看到合适的。有一本《C嵌入式编程设计模式》,作者douglass。书一共6章,里面没有太多高含金量的内容。书的主要问题在于没有真正把设计模式应用到C,而是把一些基本的嵌入式开发注意点包装成模式,中断算一种设计模式,轮询算一种设计模式,互斥算一种模式。照这个套路,C函数指针使用肯定也算一种模式,强制类型转换肯定也得算。我觉得是为了出书而滥造模式。这本书就状态机模式描述比较多些。这人还合写了另外一本书叫《Real-Time Design Patterns》,我也感觉内容非常稀,那些内容根本不能称为设计模式(Design Patterns)。我以后不会看他的书了。

本专题尝试简单讲解设计模式的思路,在嵌入式中的应用和样例代码入手,特别是注意设计模式在linux内核和实际开发中的应用,总结出真正在C语言和嵌入式开发中有生命力的少数几个模式。C语言实现设计模式的几个利器有结构体,函数指针,利用数组实现多态。

本专题讲解模式会按照如下格式:

u  模式的介绍

u  模式的应用场景

u  样例代码

u  模式总结

样例代码全部以C代码实现,可能会穿插讲解java样例以方便对比为什么C实现模式演化成这个样子以及和面向对象语言的差异。

C语言应用设计模式的误区

在C语言开发中应用设计模式有几种现象,分析如下

用C模拟面向对象

用C模拟面向对象,用结构体模拟类,用结构体包含看作继承。这种做法在特定需要的场合少量使用尚可,但是如果为了模拟面向对象的特性就南辕北辙了。

用很多特定的宏来将C在形式上封装为C++

用C模仿面向对象和设计模式有另外一种流派,就是用很多特定的宏来封装。我非常反对这种用法,因为基本上对于程序员而言,已经对C语言的阅读和书写造成了严重的干扰,不能为了面向对象而面向对象,C语言自然有其简洁高效的一面。

盲目追求设计模式

随着设计模式的思想的普及,很多设计师对设计模式盲目崇拜和过分追求,为了用模式而用模式,削足适履。对于嵌入式开发常用的C语言而言,少了很多面向对象的特点,经典的23个设计模式肯定不会都适用,而且在实际工作中,其实也不会为了模式而模式。而且从技术上讲23个设计模式当时是围绕面向对象提出的,有的模式偏向于逻辑,那么可以被C借鉴,有的是为了解决面向对象本身的集成,关联等问题,那就没有必要借鉴。

各章节链接

设计模式的C语言应用-状态机模式-第二章

设计模式的C语言应用-责任链模式-第三章

设计模式的C语言应用-观察者模式-第四章
设计模式的C语言应用-命令模式-第五章

设计模式的C语言应用-适配系列模式-第六章

设计模式的C语言应用-建造者模式-第七章
设计模式的C语言应用-外观模式-第八章
设计模式的C语言应用-访问者模式-第九章

设计模式的C语言应用-非典型模式-第十章

设计模式的分类

设计模式如下分为创建型模式,结构型模式,行为型模式。

创建型模式

1、抽象工厂模式(Abstract Factory)

2、建造者模式(Builder)

3、工厂方法模式(Factory Method)

4、原型模式(Prototype)

5、单例模式(Singleton)

结构型模式

1、适配器模式(Adapter)

2、桥接模式(Bridge)

3、组合模式(Composite)

4、装饰者模式(Decorator)

5、外观模式(Facade)

6、享元模式(Flyweight)

7、代理模式(Proxy)、

行为型模式

1、职责链模式(Chain of Responsibility)

2、命令模式(Command)

3、解释器模式(Interpreter)

4、迭代器模式(Iterator)

5、中介者模式(Mediator)

6、备忘录模式(Memento)

7、观察者模式(Observer)

8、状态模式(State)

9、策略模式(Strategy)

10、模板方法模式(Template Method)

11、访问者模式(Visitor)

来源:华为云社区  作者:lurayvis

设计模式的C语言应用-导言-第一章相关推荐

  1. 数据结构c语言版第一章答案,《c语言数据结构》第一章概论自测题答案

    <<c语言数据结构>第一章概论自测题答案>由会员分享,可在线阅读,更多相关<<c语言数据结构>第一章概论自测题答案(4页珍藏版)>请在人人文库网上搜索. ...

  2. c语言第一章,C语言修正版第一章

    <C语言修正版第一章>由会员分享,可在线阅读,更多相关<C语言修正版第一章(28页珍藏版)>请在人人文库网上搜索. 1.C,语言,重要性,结构化编程语言,语言的入门课,基础课, ...

  3. 数据结构(C语言)第二版 第一章课后答案

    数据结构(C语言)第二版 第一章课后答案 这本书,我以后也会用,所以趁着考完试做个整理,顺便分享出来.电子资源发不出来,放评论区吧,有需要自取. 1. 简述下列概念:数据.数据元素.数据项.数据对象. ...

  4. 《Go语言圣经》第一章 - 读书笔记

    <Go语言圣经>第一章 - 读书笔记 第一章 Go语言入门 01 Hello World 02 命令行参数 练习 练习1.1 练习1.2: 练习1.3: 03 查找重复的行 例子运行 du ...

  5. 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第1章,第1.1节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  6. 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)

    java入门-第一章Java语言概述 1基础常识 软件开发 人机交互方式 常用的DOS命令(win系统,有一些直接通过命令执行的) 2 Java语言概述 什么是计算机语言 关于面向对象和面向过程 Ja ...

  7. C语言程序教程第一章答案,C语言教程课后习题答案

    C语言程序设计教程 电子科技大学出版社 主编:周鸣争 第一章 C语言概述 一.简答题 1.(1)语言简洁.紧凑,使用方便.灵活:(2)运算符丰富:(3)具有丰富的数据类型: (4)具有结构化的控制语句 ...

  8. C语言基础入门 - 第一章 - 从入门到入土

    1.1  C语言概述 ----------------------------------------------------------------------------------------- ...

  9. python高级语言应用报告_Python 语言及其应用 - 第一章

    1.1:Python是一门动态语言(也被称为脚本语言),是一门非常通用的高级语言. 1.2:关于静态语言与动态语言:静态语言要求你必须声明每个变量的类型:它会使用多少内存以及允许的使用方法.计算机利用 ...

最新文章

  1. 点击按钮显示谷歌地图
  2. 简单易懂的 pwnable.kr 第一题[fd]Writeupt
  3. Java命令行界面(第24部分):MarkUtils-CLI
  4. Elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段 。
  5. BZOJ 1304: [CQOI2009]叶子的染色
  6. 2.卷2(进程间通信)---Posix IPC
  7. Linux-页、页表、页框(块)+虚拟内存
  8. MAVEN本地仓库安装及配置
  9. CleanMyPC中文版切换教程(专注于电脑缓存文件清理的工具)
  10. 51单片机蜂鸣器演奏《我和我的祖国》
  11. Wilcoxon 检验之 rank-sum 与 signed-rank
  12. 自适应设计和响应式设计
  13. java数据结构运动会分数统计,数据结构实验报告(运动会分数统计系)..doc
  14. 为你留存最美好的岁月——汉印CP4000L体验评测
  15. Visual Studio 2017 正式版发布
  16. CCC3.0学习笔记_SCP03安全通道
  17. 更改tkinter的OptionMenu背景颜色和下拉菜单宽度
  18. 神气的Android Studio -Pligins什么都没有
  19. unity算法面试_Unity面试经验
  20. 2020Android面经,历时一个半月,斩获3个大厂offer

热门文章

  1. java dbcursor_优化JAVA查询Mongodb数量过大,查询熟读慢的方法
  2. linux 关闭防火墙 centos7,centos7关闭防火墙和selinux
  3. ubuntu vscode 配置字体_第五章 Ubuntu搭建ESP32开发环境(vscode)
  4. WebSocket转载
  5. CentOS 6.6 搭建Zabbix 3.0.3 过程
  6. 1.7编程基础之字符串
  7. mysql5.6-5.7性能调优
  8. 解决mysql中表字符集gbk,列字符集Latin1,python查询乱码问题
  9. python的类之新类与旧类
  10. C++对象内存布局测试总结