命令模式

命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

命令模式的好处:

1、它能较容易地设计一个命令队列;

2、在需要的情况下,可以较容易地将命令记入日志;

3、允许接收请求的一方决定是否要否决请求;

4、可以容易地实现对请求的撤销和重做;

5、由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易;

6、命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。

Invoker.h

cpp 复制代码
#ifndef INVOKER_H
#define INVOKER_H

#include "Command.h"
#include <list>

using namespace std;

class Invoker {
private:
    list<Command *> commands;
public:
    void setCommand(Command *c) {
        commands.push_back(c);
    }

    void Notify() {
        for (auto c = commands.begin(); c != commands.end(); c++) {
            (*c)->Excute();
        }
    }
};

#endif //INVOKER_H

Command.h

cpp 复制代码
#ifndef COMMAND_H
#define COMMAND_H

#include "Reciever.h"

class Command {
public:
    virtual void Excute() = 0;
    virtual void setReceiver(Receiver* r) = 0;
    virtual ~Command(){};
};

class ConcreteCommand : public Command {
private:
    Receiver* receiver;
public:
    void setReceiver(Receiver* r) {
        receiver = r;
    }
    void Excute() {
        receiver->Action();
    }
};

#endif //COMMAND_H

Receiver.h

cpp 复制代码
#ifndef RECIEVER_H
#define RECIEVER_H

#include <iostream>

class Receiver {
public:
    void Action() {
        std::cout << "Receiver" << std::endl;
    }
};

#endif //RECIEVER_H

main.cpp

cpp 复制代码
#include <iostream>
#include "Command.h"
#include "Invoker.h"

using namespace std;

int main() {
    Command* c = new ConcreteCommand();
    Receiver* r = new Receiver();
    c->setReceiver(r);

    Invoker i;
    i.setCommand(c);
    i.Notify();   // Receiver
    return 0;
}
相关推荐
beibeix20154 天前
命令模式(Command Pattern)
命令模式
SabrinaW7117 天前
命令模式思想与 EvSim 事件调度
命令模式
加载力科技24 天前
Mac 打开 ISO 文件完整教程:3 种方法挂载与解压,挂载失败也能提取文件
macos·命令模式·磁盘工具·mac打开iso·hdiutil·iso解压·mac技巧
lingchen19061 个月前
Windows CMD 的 `cd`(change directory,切换目录)命令
windows·命令模式
Lost of 程序猿1 个月前
命令模式实战:把“下单后的动作“打包成可执行的任务
后端·设计模式·c#·asp.net·命令模式
加载力科技1 个月前
硬盘咔咔响是坏盘信号!赶在数据丢失前克隆换盘:不重装系统、不丢文件
windows·嵌入式硬件·系统安全·策略模式·命令模式·硬盘
czhc11400756632 个月前
2026-09-10 综合博客:异步异常 + 排查核实思维
命令模式
geovindu2 个月前
CSharp: Command Pattern
开发语言·后端·c#·.net·.netcore·命令模式·行为模式
Java后端的Ai之路2 个月前
21、Python - 命令模式
开发语言·人工智能·python·命令模式·外观模式
Flutter OH2 个月前
Flutter OH 卡死冻屏问题定位指南
flutter·命令模式