|-------|---------------|-----------------|--------------------|
| 设计模式 | 核心思想 | 特征 | 应用场景 |
| 桥接模式 | 将抽象与实现分离 | 抽象与实现解耦,各自独立扩展 | 对象有多维度变化,避免类爆炸 |
| 工厂模式 | 封装对象创建过程 | 隐藏创建细节,解耦使用者与产品 | 创建过程复杂,需动态创建不同对象 |
| 注册器模式 | 集中管理和查找对象 | 全局访问点,统一管理实例 | 全局对象共享,插件化、服务定位 |
| 订阅者模式 | 定义对象间一对多的依赖关系 | 目标和观察者解耦,支持广播通信 | 关联对象间的联动,事件驱动,消息通知 |
桥接模式,将一堆东西抽象出共性,分成几个维度,比如现在有一堆遥控器:
- 小米普通遥控器
- 小米语音遥控器
- 小米触屏遥控器
- TCL 普通遥控器
- TCL 语音遥控器
- ......
分成两个维度,遥控器(普通、语音、触屏)和电视(小米、TCL),"桥"就是"遥控器控制电视",遥控器只管按键,电视只管播放。
工厂模式,就是将对象创建的过程封装起来。适用于同类对象很多,很复杂,还需要动态处理的情况。
注册器模式,就是将各种对象注册到一个链表里,用的时候查表即可,省心高效。
订阅者模式的核心思想:
- 发布者(Publisher):只管喊,不管谁听
- 订阅者(Subscriber):自己关注感兴趣的"频道",有消息就处理
- 事件总线(EventBus):负责把发布者的消息广播出去
架构上的变化,从蛛网到星形:


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

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

单例模式,管好你的硬件资源:
单例模式源自面向对象的思想,将多个业务都会用到的功能,打包成一个实例,自我管理,封装接口,从而节约资源,避免冲突。比如多线程下都想打印,可以创建一个打印实例,有打印锁,有环,专门管理打印业务。
命令模式:
将操作封装成表的形式,用命令绑定某个操作,当命令来的时候,查表运行即可。比如显示上,将显示画面作为一个命令和处理lcd的函数绑定。
适配器模式,让换芯片不再痛苦:
不同驱动对服务层提供同名接口,方便硬件更换。rtthread的设备驱动层就是这个设计思想

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


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