设计模式14之c++命令模式(含示例代码)

命令模式是一种行为型设计模式,它将请求封装成对象,从而允许你使用不同的请求、队列或者日志请求来参数化其他对象。这种模式的核心在于将请求的发送者和接收者解耦。

下面是一个使用 C++ 实现命令模式的示例代码:

#include <iostream>
#include <vector>
// 定义命令接口
class Command {
    
    
public:
    virtual ~Command() {
    
    }
    virtual void Execute() = 0;
};
// 具体命令类:打印命令
class PrintCommand : public Command {
    
    
public:
    void Execute() override {
    
    
        std::cout << "Hello, world!" << std::endl;
    }
};
// 具体命令类:加法命令
class AddCommand : public Command {
    
    
public:
    AddCommand(int a, int b) : a_(a), b_(b) {
    
    }
    void Execute() override {
    
    
        std::cout << a_ << " + " << b_ << " = " << a_ + b_ << std::endl;
    }
private:
    int a_;
    int b_;
};
// 命令调用者
class Invoker {
    
    
public:
    void SetCommand(Command* cmd) {
    
    
        cmd_ = cmd;
    }
    void ExecuteCommand() {
    
    
        if (cmd_) {
    
    
            cmd_->Execute();
        }
    }
private:
    Command* cmd_;
};
int main() {
    
    
    // 创建命令
    Command* print_cmd = new PrintCommand();
    Command* add_cmd = new AddCommand(1, 2);
    // 创建命令调用者
    Invoker invoker;
    // 设置命令并执行
    invoker.SetCommand(print_cmd);
    invoker.ExecuteCommand();
    invoker.SetCommand(add_cmd);
    invoker.ExecuteCommand();
    // 释放内存
    delete print_cmd;
    delete add_cmd;
    return 0;
}

在上面的代码中,我们定义了一个 Command 接口,其中包含了一个 Execute() 纯虚函数。PrintCommand 和 AddCommand 是具体的命令类,它们分别实现了 Execute() 函数,以完成具体的命令操作。

Invoker 类是命令调用者,它有一个 SetCommand() 函数用于设置命令,以及一个 ExecuteCommand() 函数用于执行命令。

在 main() 函数中,我们首先创建了两个具体的命令对象,然后创建了一个命令调用者对象。接着,我们将两个命令对象分别设置给命令调用者,并执行命令。最后,我们释放了命令对象的内存。

命令模式的优点在于它使得请求发送者和接收者之间解耦,从而可以更加灵活地设计系统。此外,命令对象可以方便地组合成复合命令,从而实现更加复杂的功能。

猜你喜欢

转载自blog.csdn.net/dica54dica/article/details/130021285