1. 为什么嵌入式开发需要工厂模式?
在嵌入式开发中,硬件变更就像家常便饭。上周还在用STM32F103,这周老板突然说要换成GD32E230;昨天还在调试ESP8266,今天客户要求改用RTL8710。这种场景下,传统的硬编码方式会让代码变成"意大利面条"——各种#ifdef交织在一起,维护成本呈指数级上升。
工厂模式的核心价值在于:将对象的创建与使用分离。具体到嵌入式领域,就是让芯片相关的硬件操作(如GPIO控制、外设初始化)与业务逻辑解耦。当需要更换芯片时,你只需要修改工厂类的创建逻辑,而不必在业务代码中到处打补丁。
提示:在资源受限的MCU上实现设计模式时,要特别注意内存开销。工厂模式相比其他创建型模式(如抽象工厂)更轻量,适合大多数8/32位单片机场景。
2. 工厂模式的三种实现套路
2.1 基础版:简单工厂
这是最易上手的实现方式,适合单一芯片型号的场景。我们通过一个函数封装对象创建过程:
c复制// 硬件操作接口
typedef struct {
void (*init)(void);
void (*setPin)(uint8_t pin, uint8_t value);
} HardwareOps;
// 不同芯片的实现
static void STM32_Init() { /* STM32初始化代码 */ }
static void GD32_Init() { /* GD32初始化代码 */ }
HardwareOps* CreateHardware(uint8_t chipType) {
static HardwareOps ops;
switch(chipType) {
case CHIP_STM32:
ops.init = STM32_Init;
break;
case CHIP_GD32:
ops.init = GD32_Init;
break;
}
return &ops;
}
2.2 进阶版:工厂方法
当需要支持多系列芯片(如STM32F1/F4/H7)时,可以采用工厂方法模式。每种芯片
