大话设计模式之命令模式

命令模式是一种行为型设计模式,它将请求或操作封装成一个对象,从而允许客户端参数化操作。这意味着客户端将一个请求封装为一个对象,这样可以将请求的参数化、队列化和记录日志,以及支持可撤销的操作。

命令模式主要由以下几个角色组成:

  • 命令(Command) :声明执行操作的接口,通常包含一个执行方法 execute()
  • 具体命令(Concrete Command):实现命令接口,具体定义了执行操作的方法。
  • 调用者(Invoker):负责调用命令对象执行请求的对象。
  • 接收者(Receiver):知道如何执行命令相关的操作,实现了实际的行为。
cpp 复制代码
#include <iostream>
#include <string>
#include <vector>

// 命令接口
class Command {
public:
    virtual ~Command() {}
    virtual void execute() = 0;
};

// 具体命令:打开文件命令
class OpenFileCommand : public Command {
private:
    std::string filename_;

public:
    OpenFileCommand(const std::string& filename) : filename_(filename) {}

    void execute() override {
        std::cout << "Opening file: " << filename_ << std::endl;
        // 实际打开文件的操作
    }
};

// 具体命令:关闭文件命令
class CloseFileCommand : public Command {
private:
    std::string filename_;

public:
    CloseFileCommand(const std::string& filename) : filename_(filename) {}

    void execute() override {
        std::cout << "Closing file: " << filename_ << std::endl;
        // 实际关闭文件的操作
    }
};

// 调用者
class Invoker {
private:
    std::vector<Command*> commands_;

public:
    void addCommand(Command* command) {
        commands_.push_back(command);
    }

    void executeCommands() {
        for (Command* command : commands_) {
            command->execute();
        }
    }
};

int main() {
    // 创建具体命令对象
    OpenFileCommand openFile("example.txt");
    CloseFileCommand closeFile("example.txt");

    // 创建调用者对象
    Invoker invoker;

    // 添加命令到调用者
    invoker.addCommand(&openFile);
    invoker.addCommand(&closeFile);

    // 执行命令
    invoker.executeCommands();

    return 0;
}

/*
在这个示例中,Command 是命令接口,声明了一个 execute() 方法用于执行命令。
OpenFileCommand 和 CloseFileCommand 是具体命令,分别表示打开文件和关闭文件的操作。
Invoker 是调用者,负责调用命令对象执行请求。在 main() 函数中,我们创建了具体命令对象,
并将它们添加到调用者中,最后执行了命令。
*/

觉得有帮助的话,打赏一下呗。。

相关推荐
看山是山_Lau8 小时前
建造者模式:复杂对象如何一步步构建
设计模式·建造者模式
霸道流氓气质9 小时前
业务链路追踪日志设计模式 — 从原理到实践
设计模式
nnsix1 天前
设计模式 - 建造者模式 笔记
笔记·设计模式·建造者模式
cui17875681 天前
矩阵拼团 + 复购拼团:新零售最稳的复购模式,规则简单
大数据·人工智能·设计模式·零售
百珏1 天前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
likerhood1 天前
设计模式 · 享元模式(Flyweight Pattern)java
java·设计模式·享元模式
AI大法师1 天前
从 Adobe 焕新看品牌系统升级:Logo、主色、字体与产品体验如何重新对齐
大数据·人工智能·adobe·设计模式
贵慜_Derek1 天前
《从零实现 Agent 系统》连载 03|控制循环:感知—决策—行动—反思
人工智能·设计模式·架构
nnsix1 天前
设计模式 - 原型模式 笔记
笔记·设计模式·原型模式
nnsix1 天前
设计模式 - 适配器模式 笔记
笔记·设计模式·适配器模式