文章目录

  • 前言
  • 1.设计模式之适配器模式
  • 2.设计模式之单例模式
  • 3.设计模式之命令模式
  • 4.设计模式之门面模式

前言

在嵌入式软件设计过程中,也会用到一些设计模式,所以说设计模式并不是面向对象语言的专利,下面我通过查资料以及自己的思考总结的几种适合嵌入式软件开发的设计模式,仅供参考。具体问题还要具体的分析。

1.设计模式之适配器模式

适配器模式是一种比较常用的软件设计模式(有时候叫做包装模式)。它将对象的接口转换成对于客户端(或者高层模块)来说比较容易使用的接口。通常来说,适配器用于应用程序编程接口(API)之上,以隐藏丑陋的接口或者可能发生变化的库。

很多硬件接口像笨拙的软件接口一样。可以把每个驱动程序设计为一个适配器。如果把驱动程序(即使不是open、close、read、write、ioctl)设计成通用的接口,那么当硬件接口改变的时候就不需要改变软件了。在理想的情况下可以切换整个平台而只需要修改底层实现。如下图:
注意,驱动程序是可以堆叠的。例如:显示组件调用闪存,接着闪存调用SPI进行通信。当调用显示组件的open方法的时候,该方法调用其子系统的初始化代码,在这个初始化代码中调用闪存的open方法,然后这个方法调用SPI驱动程序的open方法。这里有三个层次的适配器是为了提高软件的可移植性和可维护性。如果对于每个层次的接口都是一致的,那么上层的代码就不可能变化了。

2.设计模式之单例模式

要确保系统中每个部分都可以访问相同的一个对象,我们可以使用单例模式
当需要一个类有且仅有一个实例的时候,单例模式是很常用的。在一个面向对象的语言中,单例模式很常用。其负责解析创建对象的请求并保持其独立的状态。对于资源的访问是全局的,但所有的访问必须经过这个唯一的实例。单例类中没有公共构造函数。在C++中类似于这样:

class Singleton
{public:static Singleton *Instance(){if(mInstance == 0){mInstance = new Singleton;}return mInstance;}protected:Singleton();//除了这个类本身没有其他类可以创建这个实例private:static Singleton *mInstance = 0;
}

比如对于日志系统来说,单例模式可以让整个系统通过唯一的实例来访问日志对象。通常当有一个单一的资源在系统的多个部分之间共享的时候,单例可以比较容易的避免冲突。在面向对象的语言中,单例也允许延迟资源分配和初始化,这样那些从来没有使用的模块就不会消耗资源。

3.设计模式之命令模式

这个模式的总体目标是将命令处理过程与实际要执行的动作解耦合。命令模式展示了一个执行操作的接口。任何时候,当你遇到这样一种情形,系统中的一部分需要对另一部分发起请求,但中介对象不需要知道这些请求的内容时,请考虑命令模式。
这个模式后续我会更新一个例子来说明。

4.设计模式之门面模式

可以想象,随着产品特性的扩展,IO接口变得越来越复杂。从长远来看,我们要隐藏每个子系统的细节。有一个标准的软件设计模式叫做门面模式(facade pattern),可以为一段代码提供一个简单的接口。门面模式旨在让软件库简单易用。
适配器模式是在两层之间充当转换的角色,门面模式则是通过简化底层的接口来做到这一点。隐藏子系统的实现细节是良好设计中很重要的一部分。它可以使代码更容易阅读,更便于测试。并且调用代码不依赖于子系统的内部实现,因此底层代码可以修改而门面则保持不变。
增加一个门面模式通常会使代码大小变大,但是从可调试性和可维护性角度来说,这样是值得的。

嵌入式软件设计之设计模式相关推荐

  1. 嵌入式软件设计第8次实验报告-140201235-陈宇

    嵌入式软件设计第8次实验报告 学号:140201235                   姓名:陈宇 组别:3                实验地点:D19 一.实验目的: 1.熟悉WWW技术中的 ...

  2. 嵌入式软件设计第12次实验报告-140201235-陈宇

    嵌入式软件设计第12次实验报告 学号:140201235             姓名:陈宇 组别:第3组                实验地点:D19 一.实验目的: 1.掌握通过GSM短信远程与 ...

  3. .NET 云原生架构师训练营(设计原则设计模式)--学习笔记

    ▲ 点击上方"DotNet NB"关注公众号 回复"1"获取开发者路线图 学习分享 丨作者 / 郑 子 铭 这是DotNet NB 公众号的第180篇原创文章 ...

  4. 嵌入式软件设计第12次实验报告

    嵌入式软件设计第12次实验报告 学号:140201126             姓名:杨鹏飞 组别:第2组                实验地点:D19 一.实验目的: 1.掌握通过GSM短信远程 ...

  5. 嵌入式软件设计第九次实验报告-140201235-陈宇

    嵌入式软件设计第九次实验报告 学号:140201235                 姓名:陈宇 组别:第3组                    实验地点:D19 一.实验目的: 1.熟悉WWW ...

  6. 嵌入式软件设计第10次实验报告

    嵌入式软件设计第10次实验报告 学号:142021234               姓名:王凯 组别:第4组                实验地点:D19 一.实验目的: 1.了解GSM模块SIM ...

  7. 嵌入式软件设计第11次实验报告

    嵌入式软件设计第11次实验报告 学号:140201101                  姓名:刘子聪 组别:第7组                        实验地点:D19 一.实验目的: ...

  8. 嵌入式软件设计第7次实验报告-140201235-陈宇

    嵌入式软件设计第7次实验报告 学号:140201235                    姓名:陈宇 组别:3                                  实验地点:D19 ...

  9. 嵌入式软件设计第十次实验报告-140201235-陈宇

    嵌入式软件设计第十次实验报告 学号:140201235          姓名:陈宇 组别:第3组                  实验地点:D19 一.实验目的: 1.了解GSM模块SIM900A ...

  10. iOS开发 - 面向对象设计的设计模式(一):创建型模式(附 Demo UML类图)

    继上一篇的面向对象设计的设计原则,本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章. 另外,本篇博客的代码和类图都保存在我的GitHub库中:中的Chapter2. 最开始说一下 ...

最新文章

  1. 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)
  2. 全球及中国防褥疮充气垫行业投资前景展望与“十四五”发展规划建议报告2021年版
  3. yii2 mysql_Yii2 数据库操作汇总
  4. C++ Boost 学习资源列表
  5. Spring AOP / AspectJ AOP 的区别?
  6. 谈谈JAVA中的安全发布
  7. ib课程计算机科学教材,热门课程:IB计算机科学的评估方式
  8. linux 任务计划 cron
  9. Security+ 学习笔记40 网络安全设备
  10. php英文书籍在线,php英语四级在线练习系统
  11. MTK6763平台手机 在国外无法成功注册VOLTE。求解
  12. 自定义报表(demo1)
  13. w3c 菜鸟mysql_W3C 教程 | 菜鸟教程
  14. c语言中 241错误式什么意思,Qt error: stray '\241' in program
  15. 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
  16. Java 年龄与疾病
  17. VirtualBox虚拟机的网卡地址重复导致的问题
  18. 项目管理中,管理者如何打造团队执行力?
  19. SessionListener与SessionAttributeListener统计用户在线问题
  20. STM32 GPIO BRR和BSRR寄存器

热门文章

  1. Java面试单点登录_单点登录面试题
  2. 淘宝订单API接口参数详解
  3. Spring Cloud 微服务架构图
  4. 微信小程序详细图文教程10分钟解决
  5. 可信计算理论与技术--远程证明技术
  6. 五一期间完成了某市交警系统的一个系统升级迁移项目
  7. LinkSLA坚持用户第一,打造可持续的运维服务方案
  8. VS创建和使用C++动态链接库教程
  9. ubuntu安装中文输入法fcitx
  10. 酷狗与鸿蒙系统,酷狗音乐2020最新版|酷狗音乐鸿蒙版安卓版下载 v10.2.7 - 跑跑车安卓网...