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

设计模式之命令模式(Command)的C++实现

1、命令模式的提出

在软件开发过程中,“行为请求者”和“行为实现者”通常呈现一种“紧耦合”,如果行为的实现经常变化,则不利于代码的维护。命令模式可以将行为的请求者和行为的实现者进行解耦。具体流程是将行为请求者封装成一个对象,将行为实现者抽象成一个类。

2、需求描述

有2两种不同的行为,两种不同行为分别对应不同的操作。设计一个代码,可以实现不同的行为对应不同的处理行为。

3、功能实现

(1)UML图如下:

 

 (2)代码实现如下:

#include <iostream>
#include <vector>// 命令接口
class Command {
public:Command(std::string cmd):m_strCmd(cmd){};virtual ~Command() {}virtual void execute() = 0;std::string& getCmd(){return m_strCmd;};
private:std::string m_strCmd;
};class ConcreteCommand1 : public Command {
public:ConcreteCommand1(std::string str):Command(str){};void execute() override {std::cout << "ConcreteCommand1: " << getCmd() << std::endl;// todo something...}
};class ConcreteCommand2 : public Command {
public:ConcreteCommand2(std::string str):Command(str){};void execute() override {std::cout << "ConcreteCommand2: " << getCmd() << std::endl;// todo something...}
};// 命令请求者
class Requester {
private:std::vector<Command*> m_vecCommands;public:void aadCommand(Command* cmd) {m_vecCommands.emplace_back(cmd);}void executeCommand() {for(auto& it:m_vecCommands){it->execute();}}
};class Client
{
public:void doWork(){Requester request;Command* command1 = new ConcreteCommand1("Command1");Command* command2 = new ConcreteCommand2("Command2");request.aadCommand(command1);request.aadCommand(command2);request.executeCommand();delete command1;delete command2;command1 = nullptr;command2 = nullptr;};
}int main() {Client obj;obj.doWork();return 0;
}

程序运行结果如下:

http://www.lryc.cn/news/153002.html

相关文章:

  • 取证工具prodiscover的基本操作
  • flutter plugins插件【二】【FlutterAssetsGenerator】
  • 看懂UML类图
  • keras深度学习框架通过简单神经网络实现手写数字识别
  • React 中的 ref 如何操作 dom节点,使输入框获取焦点
  • 最短路Dijkstra,spfa,图论二分图算法AYIT---ACM训练(模板版)
  • AK 微众银行 9.3 笔试 Java后端方向
  • 了解java中的通配符“?“
  • 浙大陈越何钦铭数据结构07-图6 旅游规划【最小堆实现】
  • OpenShift 4 - 用 Prometheus 和 Grafana 监视用户应用定制的观测指标(视频)
  • 【LeetCode】剑指 Offer <二刷>(3)
  • Ceph IO流程及数据分布
  • Netty-NIO
  • 红外物理学习笔记 ——第三章
  • 使用 htmx 构建交互式 Web 应用
  • S32K324芯片学习笔记
  • htmx-使HTML更强大
  • Java学习之序列化
  • C++实现蜂群涌现效果(flocking)
  • IDEA复制一个工程为多个并启动,测试负载均衡
  • 001_C++语法基础
  • 对Excel表中归类的文件夹进行自动分类
  • LabVIEW液压支架控制系统的使用与各种配置的预测模型的比较分析
  • C++中位运算符使用
  • 微机原理 || 第2次测试:汇编指令(加减乘除运算,XOR,PUSH,POP,寻址方式,物理地址公式,状态标志位)(测试题+手写解析)
  • 人员闯入检测告警算法
  • python中super()用法
  • jmeter While控制器
  • 3D数字孪生技术助力港口全新升级,提供实时数据进行智能调度
  • Qt日历控件示例-QCalendarWidget