【单片机】常用设计模式

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

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

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

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

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

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

订阅者模式的核心思想:

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

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

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

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

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

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

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

命令模式:

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

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

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

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

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

相关推荐
youcans_15 小时前
从零搭建 STM32 VSCode 开发环境
vscode·stm32·单片机·嵌入式硬件
qq_2975746716 小时前
设计模式系列文章(基础篇第22篇):访问者模式——分离数据结构与操作,实现灵活扩展
数据结构·设计模式·访问者模式
ye1501277745516 小时前
220V降5V0.3A电源芯片WT5104
单片机·嵌入式硬件·其他·硬件工程
第二层皮-合肥16 小时前
【数据采集专栏】输入阻抗
单片机·嵌入式硬件
風清掦16 小时前
【STM32学习笔记-15】FLASH 闪存(Claude)
笔记·stm32·单片机·嵌入式硬件·学习
易水寒陈18 小时前
stm32使用Jlink进行GDB脚本调试
stm32·单片机·嵌入式硬件
weixin_4520776418 小时前
LVGL移植到STM32教程(附源码) ----兼容正点原子精英板
stm32·单片机·嵌入式硬件
Zyed18 小时前
[STM32]Day13修改主频、睡眠模式+串口发送、停止模式+对射式红外传感器计次、待机模式+实时时钟
stm32·单片机·嵌入式硬件
硬件工程师宝典18 小时前
I2C从入门到精通之一:I2C的历史起源和综合简介
服务器·嵌入式硬件·硬件架构·i2c
金色光环19 小时前
DSP28335 SPI通信实验:从零到实战
单片机·嵌入式硬件·物联网