模式定义
下令模式(Command Pattern)是一种行为型计划模式,它将哀求封装为独立对象,使哀求的发送者与接收者解耦。通过将操纵抽象为下令对象,支持下令的存储、通报、撤销和重做,加强系统的灵活性和可扩展性。
模式布局
抽象下令类(Command)
- 定义执行下令的统一接口(如execute()方法),声明撤销/重做等扩展功能。
详细下令类(ConcreteCommand)
- 实现抽象下令接口,关联接收者对象并调用其详细方法(如启动、停息数控机床)。
接收者(Receiver)
- 现实执行操纵的对象(如数控机床),包含详细的业务逻辑。
调用者(Invoker)
- 持有下令对象并触发其执行(如数控系统控制面板)。
客户端(Client)
- 创建下令对象并配置其接收者。
实用场景
操纵队列化:如数控系统需要支持批量执行加工指令。
撤销/重做功能:支持机床操纵的历史记录回滚。
分布式通讯:将长途控制指令封装为可传输对象。
C++示例(数控系统场景)
场景说明:
数控机床通过控制面板发送下令(启动、停息、急停),下令被封装为对象,支持操纵记录和撤销。
- #include
- #include
- #include
- // 接收者:数控机床
- class CNC_Machine {
- public:
- void start() {
- std::cout << "数控机床启动,开始加工..." << std::endl;
- }
- void pause() {
- std::cout << "数控机床暂停..." << std::endl;
- }
- void emergencyStop() {
- std::cout << "紧急停止!机床复位中..." << std::endl;
- }
- };
- // 抽象命令类
- class Command {
- public:
- virtual ~Command() = default;
- virtual void execute() = 0;
- virtual void undo() = 0; // 支持撤销操作[4][7]
- };
- // 具体命令:启动命令
- class StartCommand : public Command {
- private:
- CNC_Machine& receiver_;
- public:
- explicit StartCommand(CNC_Machine& machine) : receiver_(machine) {}
- void execute() override {
- receiver_.start();
- }
- void undo() override {
- std::cout << "撤销启动:停止加工" << std::endl;
- }
- };
- // 具体命令:急停命令
- class EmergencyStopCommand : public Command {
- private:
- CNC_Machine& receiver_;
- public:
- explicit EmergencyStopCommand(CNC_Machine& machine) : receiver_(machine) {}
- void execute() override {
- receiver_.emergencyStop();
- }
- void undo() override {
- std::cout << "撤销急停:恢复运行状态" << std::endl;
- }
- };
- // 调用者:控制面板
- class ControlPanel {
- private:
- std::stack> history_;
- public:
- void executeCommand(std::unique_ptr cmd) {
- cmd->execute();
- history_.push(std::move(cmd)); // 记录操作历史[4][7]
- }
- void undoLastCommand() {
- if (!history_.empty()) {
- history_.top()->undo();
- history_.pop();
- }
- }
- };
- // 客户端使用
- int main() {
- CNC_Machine machine;
- ControlPanel panel;
- // 发送启动命令
- panel.executeCommand(std::make_unique(machine));
-
- // 发送急停命令
- panel.executeCommand(std::make_unique(machine));
-
- // 撤销上一次操作
- panel.undoLastCommand(); // 输出:撤销急停:恢复运行状态
- return 0;
- }
复制代码 代码解析
接收者:CNC_Machine类实现机床的现实操纵(如启动、急停)。
详细下令:StartCommand和EmergencyStopCommand封装操纵,关联接收者对象。
调用者:ControlPanel管理下令执行历史,支持撤销操纵。
解耦上风:新增下令(如停息下令)只需扩展Command子类,无需修改调用者代码。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |