设计模式:命令模式(C++实现)

这篇具有很好参考价值的文章主要介绍了设计模式:命令模式(C++实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

命令模式(Command Pattern)是一种行为设计模式,它将请求封装成一个对象,从而使您可以使用不同的请求对客户端进行参数化。这使得客户端可以独立于具体的请求和接收者对请求进行操作。
以下是一个简单的C++命令模式的示例:

#include <iostream>
#include <vector>

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

// 接收者类
class Receiver
{
public:
    void action()
    {
        std::cout << "Receiver is doing something." << std::endl;
    }

    void play()
    {
        std::cout << "Receiver is playing." << std::endl;
    }
};

// 具体命令类
class ConcreteCommand : public Command
{
private:
    // 接收者对象
    Receiver *receiver;

public:
    ConcreteCommand(Receiver *receiver)
    {
        this->receiver = receiver;
    }
    void execute() override
    {
        receiver->action();
    }
};

// 具体命令类
class PlayCommand : public Command
{
private:
    // 接收者对象
    Receiver *receiver;

public:
    PlayCommand(Receiver *receiver)
    {
        this->receiver = receiver;
    }
    void execute() override
    {
        receiver->play();
    }
};

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

public:
    void addCommand(Command *command)
    {
        commands.push_back(command);
    }
    
    void executeCommands()
    {
        for (auto command : commands)
        {
            command->execute();
        }
        commands.clear();
    }
};

int main()
{
    Invoker invoker;
    Receiver receiver;

    Command *command = new ConcreteCommand(&receiver);
    invoker.addCommand(command);
    invoker.executeCommands(); // 调用命令对象的execute()函数

    command = new PlayCommand(&receiver);
    invoker.addCommand(command);
    invoker.executeCommands(); // 调用命令对象的execute()函数
    return 0;
}

在上述示例中,Command是命令的基类,定义了一个纯虚函数execute(),用于执行命令。ConcreteCommand是具体的命令类,它包含了一个指向接收者对象的指针,并实现了execute()函数,将请求委托给接收者的action()函数进行处理。
Receiver是接收者类,它定义了真正执行请求的操作,即action()函数。
Invoker是调用者类,它维护一个命令对象的列表,并提供了addCommand()和executeCommands()函数。addCommand()用于向命令列表中添加命令对象,executeCommands()用于执行命令列表中的所有命令。
在main()函数中,创建了一个调用者对象invoker和一个接收者对象receiver。然后创建了一个具体的命令对象command,并将其添加到调用者的命令列表中。通过调用executeCommands()函数,调用者会依次执行命令列表中的命令。
通过命令模式,客户端可以将请求封装成命令对象,从而将请求发送者和请求接收者解耦。这样,可以灵活地组合和操作不同的请求。命令模式还支持撤销、重做等功能的实现。文章来源地址https://www.toymoban.com/news/detail-730703.html

到了这里,关于设计模式:命令模式(C++实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式】Head First 设计模式——工厂方法模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使得一个类的实

    2024年02月10日
    浏览(47)
  • 【设计模式】Head First 设计模式——构建器模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 ​ 将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同

    2024年02月09日
    浏览(38)
  • 【设计模式】Head First 设计模式——装饰者模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

    2024年02月10日
    浏览(42)
  • 【设计模式】Head First 设计模式——抽象工厂模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们具

    2024年02月10日
    浏览(39)
  • 【设计模式】Head First 设计模式——观察者模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 主题对象(出版者)管理某些数据,当主题内的数据改变,就会通知观察者(订阅者)。

    2024年02月10日
    浏览(39)
  • 设计模式:访问者模式(C++实现)

    访问者模式通过将对元素的操作与元素本身分离,使得可以在不修改元素类的情况下定义新的操作。 运行结果: 在上述代码中,Visitor是访问者接口,定义了访问具体元素的方法。Element是元素接口,定义了接受访问者访问的方法。ConcreteElementA和ConcreteElementB是具体元素类,实

    2024年02月07日
    浏览(51)
  • 设计模式之Bridge模式的C++实现

    目录 1、Bridge模式的提出 2、Bridge模式的定义 3、Bridge模式总结 4、需求描述 5、多继承方式实现 6、使用Bridge设计模式实现         在软件功能模块设计中,如果类的实现功能划分不清晰,使得继承得到的子类往往是随着需求的变化,子类急剧膨胀,充斥重复代码。将类要实现

    2024年02月13日
    浏览(45)
  • 设计模式之状态模式(State)的C++实现

    在组件功能开发过程中,某些对象的状态经常面临变化,不同的状态,其对象的操作行为不同。比如根据状态写的if else条件情况,且这种条件变化是经常变化的,这样的代码不易维护。可以使用状态模式解决这类问题。状态模式是将状态值抽象成一个基类,将不同状态下的操

    2024年02月12日
    浏览(41)
  • 设计模式之代理模式(Proxy)的C++实现

    在组件的开发过程中,有些对象由于某种原因(比如对象创建的开销很大,或者对象的一些操作需要做安全控制,或者需要进程外的访问等),会使Client使用者在操作这类对象时可能会存在问题:(1)使用者直接访问这种对象会使系统带来很多麻烦。(2)或者使用者使不能

    2024年02月12日
    浏览(40)
  • 设计模式之原型模式Prototype的C++实现

    1、原型模式提出 在软件功能设计中,经常面临着“某些结构复杂的对象”的创建工作,且创建的对象想拥有其他对象在某一刻的状态,则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象,并且该对象拥有其他对象在某一刻的状态。 2、需求描述 设计产品A,B,这

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包