您的位置:首页 > 游戏 > 手游 > 购物网站有哪些平台_智慧团建网页手机版官网_百度推广哪种效果好_小熊猫seo博客

购物网站有哪些平台_智慧团建网页手机版官网_百度推广哪种效果好_小熊猫seo博客

2025/1/4 18:58:46 来源:https://blog.csdn.net/bandaoyu/article/details/144756456  浏览:    关键词:购物网站有哪些平台_智慧团建网页手机版官网_百度推广哪种效果好_小熊猫seo博客
购物网站有哪些平台_智慧团建网页手机版官网_百度推广哪种效果好_小熊猫seo博客

什么是命令模式

命令模式是一种行为型设计模式。

它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。

例如你正在开发一款新的文字编辑器, 包含多个按钮的工具栏, 每个按钮对应编辑器的不同操作。 你创建了一个非常简洁的 按钮类, 可用于生成工具栏上的按钮, 还可用于生成各种对话框的通用按钮。

代码示例

命令模式通常包含以下角色:

  1. Command(命令接口):声明执行操作的接口。
  2. ConcreteCommand(具体命令):将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute。
  3. Invoker(调用者):要求该命令执行这个请求。
  4. Receiver(接收者):知道如何执行一个与请求相关的操作,它执行任何具体命令。
#include <iostream>
#include <memory>
#include <vector>// Receiver 类
class Light {
public:void on() {std::cout << "The light is on" << std::endl;}void off() {std::cout << "The light is off" << std::endl;}
};// Command 接口
class Command {
public:virtual ~Command() = default;virtual void execute() = 0;
};// ConcreteCommand 类
class LightOnCommand : public Command {
public:explicit LightOnCommand(Light* light) : light_(light) {}void execute() override {light_->on();}private:Light* light_;
};class LightOffCommand : public Command {
public:explicit LightOffCommand(Light* light) : light_(light) {}void execute() override {light_->off();}private:Light* light_;
};// Invoker 类
class RemoteControl {
public:void setCommand(std::unique_ptr<Command> command) {command_ = std::move(command);}void pressButton() {if (command_) {command_->execute();}}private:std::unique_ptr<Command> command_;
};int main() {Light light;RemoteControl remote;remote.setCommand(std::make_unique<LightOnCommand>(&light));remote.pressButton(); // 输出: The light is onremote.setCommand(std::make_unique<LightOffCommand>(&light));remote.pressButton(); // 输出: The light is offreturn 0;
}

主要优点


• 解耦请求发送者和接收者:发送者和接收者之间的耦合被降低。
• 支持队列和日志记录:可以很容易地实现命令队列和日志记录功能。
• 易于扩展:新增加一个命令只需要添加一个新的命令类。
• 支持撤销操作:可以轻松实现命令的撤销和重做。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com