一、结构型设计模式
两者有点相似,都是为了做到解耦的功能。
适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。
桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。
二、适配器模式的实际项目案例
1. 串口设备驱动适配
- 场景:旧设备的串口驱动函数为
uart_send_byte(uint8_t data)
,新系统统一要求serial_transmit(uint8_t* buf, uint16_t len)
接口。 - 适配方式:编写适配器函数,将
serial_transmit
转换为对uart_send_byte
的循环调用。 - 作用:新系统无需修改即可兼容旧设备驱动。
2. 第三方库集成(如日志库)
- 场景:项目原有日志接口为
log_info(const char* msg)
,引入的第三方库日志函数为third_party_log(int level, const char* format, ...)
。 - 适配方式:实现适配器
log_info
,内部调用third_party_log(INFO_LEVEL, "%s", msg)
。 - 作用:项目代码无需修改,即可使用第三方日志库。
三、桥接模式的实际项目案例
1. LVGL(嵌入式 GUI 库)
- 抽象层:控件逻辑(按钮、标签、列表等渲染规则、事件处理)。
- 实现层:硬件接口(显示屏刷新
disp_drv.flush
、触摸输入indev_drv.read
)。 - 桥接方式:通过驱动结构体(
lv_disp_drv_t
)中的函数指针关联抽象层与实现层。 - 作用:同一套 UI 逻辑可适配不同显示屏(OLED/LCD)和硬件平台(STM32/ESP32),新增硬件只需实现底层接口,无需修改 UI 逻辑。
四、一句话总结
- 桥接模式是 “未雨绸缪”:在设计初期就分离可能变化的维度,让系统更灵活地应对未来扩展。
- 适配器模式是 “亡羊补牢”:在系统集成时解决已有组件的接口冲突,让不兼容的代码协同工作。