[C++]命令模式

2023-10-31

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

github源码路径:https://github.com/dangwei-90/Design-Mode

// 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

// 参考大话设计模式 - 命令模式

#include <iostream>

#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }
#endif

using namespace std;

// 接收者 类
class Receiver {
public:
  void Action() {
    cout << "receive do action." << endl;
  }
};

// 命令者 抽象类
class Command {
public:
  virtual void SetReceiver(Receiver* receiver) = 0;
  virtual void Execute() = 0;

protected:
  Receiver* receiver_ = nullptr;
};

// 实现命令者 类
class ConcreteCommand : public Command {
public:
  void SetReceiver(Receiver* receiver) {
    receiver_ = receiver;
  }

  void Execute() {
    if (receiver_) {
      receiver_->Action();
    }
  }
};

// 调用者 类
class Invoker {
public:
  void SetCommand(Command* command) {
    command_ = command;
  }

  void ExecuteCommand() {
    command_->Execute();
  }

private:
  Command* command_ = nullptr;
};


int main()
{
  Receiver* receiver = new Receiver();
  Command* command = new ConcreteCommand();
  command->SetReceiver(receiver);
  Invoker* invoker = new Invoker();
  invoker->SetCommand(command);

  invoker->ExecuteCommand();

  SAFE_DELETE(invoker);
  SAFE_DELETE(command);
  SAFE_DELETE(receiver);

	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[C++]命令模式 的相关文章

  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector

随机推荐

  • Github怎么上传到代码到仓库

    Github是一个非常受欢迎的代码托管平台 使用Git作为版本控制系统 它允许开发者将自己的代码存储在远程仓库中 以便于团队协作 项目管理和版本控制 本教程将详细介绍如何将代码上传到Github仓库 准备工作 注册并登录Github账户 访
  • 双目立体视觉-特征检测与特征匹配总结

    特征检测 opencv可以检测图像的主要特征 然后提取这些特征 使其成为图像描述符 特征 特征就是有意义的图像区域 该区域具有独特性或易于识别性 角点与高密度区域是一个很好的特征 边缘可以将图像分为两个区域 因此可以看作很好的特征 斑点 与
  • STM32F103C8T6+ESP-01S+MQTT服务器实现数据上传和接收(二)

    MQTT自定义库函数的实际应用 前言 串口配置 初始化 printf输出重定向 串口中断函数 对串口接收到的数据进行处理 baseAck 获取MQTT主题内容get mqttval msg handle 总结 文章目录 STM32F103C
  • 一个正整数表示为n(n>=2)个连续正整数之和!

    今天下午无意中看到这个题目 题目描述 一个正整数有可能可以被表示为n n gt 2 个连续正整数之和 如 15 1 2 3 4 5 15 4 5 6 15 7 8 请编写程序 根据输入的任何一个正整数 找出符合这种要求的所有连续正整数序列
  • Python入门详细攻略(初学者一定要看的),一文讲清,赶紧收藏

    目前python可以说是一门非常火爆的编程语言 应用范围也非常的广泛 工资也挺高 未来发展也极好 Python究竟应该怎么学呢 我自己最初也是从零基础开始学习Python的 给大家分享Python的学习思路和方法 一味的买书看书 看视频 是
  • 前端炫酷特效合集

    我们经常在抖音上看到一些前端很酷的特效 诸如 快叫你学编程的朋友给你写一个圣诞树 看着是不是很酷炫呢 其实只要有源码 你也可以拥有哦 跟大家分享多款前端特效源码 需要的朋友可以去在这里资源站 源码 专栏进行预览下载 还可以在线演示哦 以后还
  • 运动控制的轴到底是什么

    先介绍几个名词 硬件资源 数字量输出资源 do 包括伺服使能数字量输出 伺服报警清除数字量输出 通用数字量输出 数字量输入资源 di 正限位数字量输入 负限位数字量输入 驱动报警数字量输入 原点 信号数字量输入 通用数字量输入 编码器计数资
  • 暑假超越计划练习题(2)

    笔者开头感想 现如今 暑假已经过大半部分 但是随着时间流逝 笔者的C语言仍没有多大的起色 日新月急 但是没有办法 思前想后 笔者决定对于之前所学的内容进行一下回顾复习 因此刷题是必须的 所以笔者将最近做过的习题 将会在此整理一遍 重新整理成
  • Json文件编辑功能

    1 Json格式 JSON JavaScript Object Notation 是一种轻量级的数据交换格式 它基于 ECMAScript European Computer Manufacturers Association 欧洲计算机协
  • Yarn 的安装与使用

    Yarn 是一款 JavaScript 的包管理工具 npm 的代替方案 在 Yarn 的官网有着一句话 Safe stable reproducible projects 正如 Yarn 官网的介绍 Yarn 的具有速度快 安全 可靠 的
  • React package.json配置参数详解

    React package json配置参数详解 一 必须属性 二 描述属性 三 依赖配置 四 脚本配置 五 文件 目录 package json文件想必大家都不陌生 一般的项目根目录下都会有这个文件 文件中定义了项目所需要的各个模块 以及
  • windows电脑生成ios证书的方法

    在uniapp开发进行云打包的时候 打包Ios应用需要p12格式的私钥证书和证书profile文件 无论使用windows电脑 还是mac电脑 生成ios证书 需要苹果开发者账号 假如你还没有苹果开发者账号 你可以参考下文先到苹果开发者中心
  • 业界首个高性能交互式自动标注工具——EISeg正式开源!

    点击左上方蓝字关注我们 在人工智能行业有这么一句话 深度学习有多智能 背后就有多少人工 这句话直接说出了深度学习从业者心中的痛处 毕竟模型的好坏数据占着很大的因素 但是数据的标注成本却让很多从业者感到头疼 在标注中 矩形框标注还相对简单 但
  • 进程管理中的数据结构

    一方面 为了便于对计算机的各类资源 包括硬件和信息 的使用和管理 OS将它们抽象为相应的各种数据结构 以及提供一组对资源进行操作的命令 用户利用这些数据结构和操作命令来执行相关的操作 无需关系具体实现细节 另一方面 操作系统作为计算机资源的
  • 小米MIX 解BL锁教程 申请BootLoader解锁教程

    小米MIX 线刷兼救砖 解账户锁 纯净刷机包 教程 一 准备工作 1 注册小米账号 点击注册 已有小米账号请忽视 2 在手机中登陆 小米账号 3 下载并解压 小米解锁工具 或 点击这里下载安装 二 开始解锁 1 打开 小米解锁官网 http
  • 船只检测——文献阅读第一期,目标检测+哨兵Sentinel数据

    Read with me 因为毕设做船只检测 应该就是用哨兵二号数据提取船只 所以阅读了很多这种文献 想做一个新的企划 叫做和我一起读文献 read with me 分享最近读的所有文献 0代码 纯心得 下面是画的思维导图 已经筛除了部分灌
  • 你好 很高兴学习java_Hello.Java//Tom and Jerry

    class A void f System out println I am A class B public class Hello public static void main String arg System out printl
  • Windows7下WebRTC环境搭建与编译

    之前对WebRTC编程的时候网上找了很多的资料 经过不断的碰壁和实验总结 最终有了以下快捷的WebRTC环境搭建与编译方法 1 首先安装VisualStudio 2008 打上ServicePack1补丁包 也可以安装VisualStudi
  • android.content.res.Resources$NotFoundException: String resource ID #0x1解决方案

    问题描述 Android Studio爆红 android content res Resources NotFoundException String resource ID 0x1 原因分析 这是由于DataBinding进行双向绑定时
  • [C++]命令模式

    命令模式 将一个请求封装为一个对象 从而使你可用不同的请求对客户进行参数化 对请求排队或记录请求日志 以及支持可撤销的操作 github源码路径 https github com dangwei 90 Design Mode 此文件包含 m