【单片机】常用设计模式

|-------|---------------|-----------------|--------------------|
| 设计模式 | 核心思想 | 特征 | 应用场景 |
| 桥接模式 | 将抽象与实现分离 | 抽象与实现解耦,各自独立扩展 | 对象有多维度变化,避免类爆炸 |
| 工厂模式 | 封装对象创建过程 | 隐藏创建细节,解耦使用者与产品 | 创建过程复杂,需动态创建不同对象 |
| 注册器模式 | 集中管理和查找对象 | 全局访问点,统一管理实例 | 全局对象共享,插件化、服务定位 |
| 订阅者模式 | 定义对象间一对多的依赖关系 | 目标和观察者解耦,支持广播通信 | 关联对象间的联动,事件驱动,消息通知 |

桥接模式,将一堆东西抽象出共性,分成几个维度,比如现在有一堆遥控器:

  • 小米普通遥控器
  • 小米语音遥控器
  • 小米触屏遥控器
  • TCL 普通遥控器
  • TCL 语音遥控器
  • ......

分成两个维度,遥控器(普通、语音、触屏)和电视(小米、TCL),"桥"就是"遥控器控制电视",遥控器只管按键,电视只管播放。

工厂模式,就是将对象创建的过程封装起来。适用于同类对象很多,很复杂,还需要动态处理的情况。

注册器模式,就是将各种对象注册到一个链表里,用的时候查表即可,省心高效。

订阅者模式的核心思想:

  • 发布者(Publisher):只管喊,不管谁听
  • 订阅者(Subscriber):自己关注感兴趣的"频道",有消息就处理
  • 事件总线(EventBus):负责把发布者的消息广播出去

架构上的变化,从蛛网到星形:

观察者模式,有点类似订阅模式,但是观察者本质是一个回调函数表,是需要立刻执行的。

  • PID 模块不需要知道 LCD 的存在,它只管修改数据。
  • LCD 也不需要知道谁在改数据,它只管订阅、等通知、刷新显示。
  • 新增功能? 只需要写一个新的观察者,注册到数据上即可。完全不用动原有代码。

在观察者模式的基础上,衍生了显示常用的MVC模式

单例模式,管好你的硬件资源:

单例模式源自面向对象的思想,将多个业务都会用到的功能,打包成一个实例,自我管理,封装接口,从而节约资源,避免冲突。比如多线程下都想打印,可以创建一个打印实例,有打印锁,有环,专门管理打印业务。

命令模式:

将操作封装成表的形式,用命令绑定某个操作,当命令来的时候,查表运行即可。比如显示上,将显示画面作为一个命令和处理lcd的函数绑定。

适配器模式,让换芯片不再痛苦:

不同驱动对服务层提供同名接口,方便硬件更换。rtthread的设备驱动层就是这个设计思想

责任链模式,主要用于通信链路层协议解析。在写代码上,就是多用反向判断错误条件,然后提前退出,而不是正向判断,什么条件满足我才该执行:

生产者消费者模式,主要解决生产消费速度不匹配问题,通过缓存实现异步操作,主要用于通信物理层。

相关推荐
杰杰桀桀桀2 小时前
4*4无时延矩阵键盘(非阻塞)--附代码链接
stm32·单片机·嵌入式硬件·矩阵·计算机外设·无时延矩阵键盘
奶茶拌火锅2 小时前
EB配置Tc27x——MCU
单片机·嵌入式硬件
cmpxr_2 小时前
【单片机】STM32Fxx启动模式怎么接
stm32·单片机·嵌入式硬件
篮子里的玫瑰2 小时前
STM32 时序计算指南:时钟周期与波特率深入剖析
stm32·单片机·嵌入式硬件
feifeigo1232 小时前
基于STM32F407和WM8978的MP3播放程序设计与实现
stm32·单片机·嵌入式硬件
点灯小铭3 小时前
基于单片机的智能感应式汽车雨刮器控制系统设计
单片机·嵌入式硬件·汽车·毕业设计·课程设计·期末大作业
独小乐3 小时前
007.GNU C内联汇编杂谈|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·汇编·单片机·嵌入式硬件·arm·gnu
清风6666663 小时前
基于单片机的自动存包柜设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
LiuYouth_1233 小时前
耳机双链接A、B手机,A有业务的情况下,B手机播放音乐需要外放 -- 基于中科蓝汛897X
单片机