专栏导读:在 C 语言中,函数调用通常是瞬时的。但在命令模式下,我们将“函数调用”封装成一个结构体对象(包含函数指针 + 参数)。这样一来,请求就被实体化了:你可以把它放进队列里排队执行(异步),存进 Flash 里以后执行(宏录制),甚至把刚才执行的命令反向操作一遍(撤销/Undo)。
1. 场景还原 (The Pain)
假设你正在做一个智能家居中控面板。
菜鸟的写法:硬编码的耦合
// Button_ISR.c
void On_Key1_Pressed() {
// 痛点1:硬编码。按键和业务锁死。
// 如果想改键位,必须改代码重新编译。
Light_On(LIVING_ROOM);
Curtain_Open(BALCONY);
}
void On_Key2_Pressed() {
// 痛点2:无法复用。
// 类似的“开灯”逻辑在语音控制模块里又要写一遍。
Light_Off(LIVING_ROOM);
}
架构师的审视
无法动态配置:用户不能自定义按键功能。
时空耦