当前位置: 首页 > news >正文

命令模式详解

命令模式

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

人话: 总体来说, 就是一个命令类, 一个执行类, 命令类包括执行类, 然后在外部添加一个总的管理类, 来管理命令列表

与其他模式比较

与修饰器模式对比:与修饰器模式非常像, 就是在真正的执行者外面包裹一层修饰类, 只不过这里叫做命令类
比如做日志操作, 事务操作, 修饰模式也是可以的啊, 甚至结构都差不多, 唯一不同的就是外面多了一个总的控制类

优点: 不过还是有好处的, 就是将操作 和 执行者解耦了, 比如我想执行一个唱歌命令, 可以解耦的指定不通的类来唱, 没有写死

代码

class Executor
{
public:void log(){cout << "记录日志" << endl;}void send(){cout << "向服务端发送数据" << endl;}
};class Command
{
private:Executor* e;
public:inline Executor* get_executor() { return e; };Command(Executor* _e) : e(_e) {};virtual void run() = 0;
};class LogCommand : public Command
{
public:LogCommand(Executor* _e) : Command(_e) {};void run() override{get_executor()->log();}
};class NetCommand : public Command
{
public:NetCommand(Executor* _e) : Command(_e) {};void run() override{get_executor()->send();}
};class Invoker
{
private:vector<Command*> _commands;
public:void add_command(Command* c) { _commands.push_back(c); };void execute_commands(){for (Command* c : _commands)c->run();}
};int main()
{Invoker* invoker = new Invoker();Executor* e = new Executor();LogCommand* lc = new LogCommand(e);NetCommand* nc = new NetCommand(e);invoker->add_command(lc);invoker->add_command(nc);invoker->execute_commands();return 0;
}

执行结果
在这里插入图片描述


http://www.mrgr.cn/news/12440.html

相关文章:

  • PPT布局图片文本解析检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
  • 智慧升级,触手可及:Vatee万腾平台的全方位服务
  • 国内使用tensorflow_datasets加载数据
  • STM32—USART串口外设
  • 数据结构与算法——Java实现 2.衡量算法好坏的标准
  • ETAS工具链自动化实战指南<二>
  • 【STM32 Blue Pill编程】-UART数据接收与发送(轮询模式)
  • Centos 设置成中国时区
  • GitHub 与 AWS CodeCommit
  • 【MATLAB源码-第198期】基于simulink的三相光伏并网仿真模拟。
  • 美国高防服务器运行《黑神话:悟空》配置需求及优化方法
  • AI辅助编码在主流IDE中的智能代码补全说明
  • 前端接口请求与后端交互详解 联调后端取不到值 自己的一点记录写的比较随意 会比较乱但都是干货
  • Excel打开密码的两种设置方法!
  • 【论文阅读】KAN: Kolmogorov–Arnold Networks(2024)
  • 从工程师视角看 “Multi-Agent as a Service (MAaaS)”
  • window 安装 anaconda教程(含安装包)
  • 创建一个用于修改本地DNS解析记录的Windows客户端
  • 【UE5.1】NPC人工智能——07 NPC在巡逻过程中休息
  • 软件测试——自动化测试selenium