命令模式

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

命令模式的好处:
1、它能较容易地设计一个命令队列;
2、在需要的情况下,可以较容易地将命令记入日志;
3、允许接收请求的一方决定是否要否决请求;
4、可以容易地实现对请求的撤销和重做;
5、由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易;
6、命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。

在这里插入图片描述
Invoker.h

#ifndef INVOKER_H
#define INVOKER_H#include "Command.h"
#include <list>using namespace std;class Invoker {
private:list<Command *> commands;
public:void setCommand(Command *c) {commands.push_back(c);}void Notify() {for (auto c = commands.begin(); c != commands.end(); c++) {(*c)->Excute();}}
};#endif //INVOKER_H

Command.h

#ifndef COMMAND_H
#define COMMAND_H#include "Reciever.h"class Command {
public:virtual void Excute() = 0;virtual void setReceiver(Receiver* r) = 0;virtual ~Command(){};
};class ConcreteCommand : public Command {
private:Receiver* receiver;
public:void setReceiver(Receiver* r) {receiver = r;}void Excute() {receiver->Action();}
};#endif //COMMAND_H

Receiver.h

#ifndef RECIEVER_H
#define RECIEVER_H#include <iostream>class Receiver {
public:void Action() {std::cout << "Receiver" << std::endl;}
};#endif //RECIEVER_H

main.cpp

#include <iostream>
#include "Command.h"
#include "Invoker.h"using namespace std;int main() {Command* c = new ConcreteCommand();Receiver* r = new Receiver();c->setReceiver(r);Invoker i;i.setCommand(c);i.Notify();   // Receiverreturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gpt-6有望成为通用工具

OpenAI CEO山姆奥特曼&#xff08;Sam Altman&#xff09;在最新的博客访谈中&#xff0c;提到gpt-6有望成为通用工具。 奥特曼还认为&#xff0c;目前的模型不够聪明&#xff0c;“使用GPT-2进行科学研究曾被认为是不切实际的想法。而如今&#xff0c;虽然人们使用GPT-4进行科…

获取公募基金净值【数据分析系列博文】

摘要 从指定网址获取公募基金净值数据&#xff0c;快速解析并存储数据。 &#xff08;该博文针对自由学习者获取数据&#xff1b;而在投顾、基金、证券等公司&#xff0c;通常有Wind、聚源、通联等厂商采购的数据&#xff09; 导入所需的库&#xff1a;代码导入了一些常用的库…

OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位

本文使用Python库dlib和OpenCV来实现面部特征点的检测和标注。 下面是代码的主要步骤和相关的代码片段&#xff1a; 步骤一&#xff1a;导入必要的库和设置参数 首先&#xff0c;代码导入了必要的Python库&#xff0c;并通过argparse设置了输入图像和面部标记预测器的参数。…

.NET/C#汇总 —— ADO.NET、XML、HTTP、AJAX、WebService

1. .NET和C#有什么区别? .NET⼀般指 .NET FrameWork框架,它是⼀种平台,⼀种技术。 C#是⼀种编程语⾔,可以基于.NET平台的应⽤。 2.请编程遍历⻚⾯上所有TextBox控件并给它赋值为string.Empty? foreach (System.Windows.Forms.Control control in this.Controls) {if (c…

抓取电商产品数据的方法|电商平台商品详情数据|批量上架|商品搬家|电商封装API数据采集接口更高效安全的数据采集

大量级电商数据采集时使用电商API接口有以下优势&#xff1a; 1. 数据准确性&#xff1a;通过电商API接口获取数据&#xff0c;可以保证数据的准确性和实时性&#xff0c;避免了手动采集可能出现的错误和延迟。 2. 自动化采集&#xff1a;API接口可以实现自动化的数据获取和更…

交换排序:冒泡排序和快速排序

冒泡排序 思路 通过多次遍历数组&#xff0c;比较相邻的元素&#xff0c;并交换它们&#xff0c;使得每次遍历结束后&#xff0c;最大&#xff08;或最小&#xff09;的元素都“冒泡”到数组的末尾 实现 public class Main {public static void main(String[] args) {int[] …

ns3.36以后的版本中_ns3命令的原理_CMAKE的使用以及一些例子

本文主要来自于ns3的官方文档&#xff1a;4.3. Working with CMake — Manual&#xff0c;不过只包含以下部分&#xff1a; 4.3. 使用CMake 4.3.1. 配置项目 4.3.1.1. 使用ns3配置项目 4.3.1.2. 使用CMake配置项目 4.3.2. 手动刷新CMake缓存 4.3.3. 建设项目 4.3.3.1. 使用ns3…

生活中的洪特规则

不知道你还记不记得高中物理所学的一个奇特的物理规则&#xff1a;洪特规则。 洪特规则是德国人弗里德里希洪特&#xff08;F.Hund&#xff09;根据大量光谱实验数据总结出的一个规律&#xff0c;它指出电子分布到能量简并的原子轨道时&#xff0c;优先以自旋相同的方式分别占…

企业网站制作如何被百度收录

1、网站在百度中的整体评分 说俗点就是网站的权重&#xff0c;在优化过程中我们会见到很多网站出现秒收的情况&#xff0c;发布的文章几分钟就可以收录&#xff0c;这个通过SITE语法都可以去查询&#xff0c;那么这跟自己的网站权重以及内容更新习惯是有非常重要的关联。 我们…

【函数式接口使用✈️✈️】通过具体的例子实现函数结合策略模式的使用

目录 前言 一、核心函数式接口 1. Consumer 2. Supplier 3. Function,> 二、场景模拟 1.面向对象设计 2. 策略接口实现&#xff08;以 Function 接口作为策略&#xff09; 三、对比 前言 在 Java 8 中引入了Stream API 新特性&#xff0c;这使得函数式编程风格进…

nginx 导致websocket无法连接的解决办法

答&#xff1a;在config配置文件中 map $http_upgrade $connection_upgrade { default upgrade; close; } server { listen 443 ssl; server_name your_domain.com; ssl_certificate /path/to/ssl_certificate.crt; ssl_certificate_key /path/to/…

【IoTDB 线上小课 02】开源增益的大厂研发岗面经

还有友友不知道我们的【IoTDB 视频小课】系列吗&#xff1f; 关于 IoTDB&#xff0c;关于物联网&#xff0c;关于时序数据库&#xff0c;关于开源...给我们 5 分钟&#xff0c;持续学习&#xff0c;干货满满~ 5分钟学会 大厂研发岗面试 之前的第一期小课&#xff0c;我们听了 I…

设计模式|迭代器模式(Iterator)

文章目录 结构优缺点优点缺点使用了迭代器模式的知名框架代码示例在实现迭代器时,需要有什么考虑迭代器模式(Iterator)是一种行为设计模式,它允许在不暴露集合底层表示的情况下,顺序访问一个集合中的元素。这种模式在需要逐个处理集合中的元素,而又不希望暴露其内部结构的…

1.总结串口的发送和接收功能使用到的函数2.总结DMA的作用,和DMA+空闲中断的使用方式3.使用PWM+ADC光敏电阻完成光控灯的实验

1.总结串口的发送和接收功能使用到的函数 串口发送函数&#xff1a;HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) UART_HandleTypeDef *huart&#xff1a;指定要使用的串口 const uint8_t *pData&…

爬虫入门——Request请求

目录 前言 一、Requests是什么&#xff1f; 二、使用步骤 1.引入库 2.请求 3.响应 三.总结 前言 上一篇爬虫我们已经提及到了urllib库的使用&#xff0c;为了方便大家的使用过程&#xff0c;这里为大家介绍新的库来实现请求获取响应的库。 一、Requests是什么&#xff1…

如何确保美国站群服务器的安全性?

选择服务器安全性很重要&#xff0c;那么如何确保美国站群服务器的安全性&#xff0c;rak部落小编为您整理发布如何确保美国站群服务器的安全性。 确保美国站群服务器的安全性&#xff0c;您可以采取以下措施&#xff1a; - **定期更新和升级**&#xff1a;保持服务器操作系统和…

MT2045 斐波那契,但是是字符串

现在有字符串组&#xff1a; 第0项a0​“IAKIOI”&#xff1b; 第1项a1​“WHENWILLSCORLLOFTAIWUCOMEOUT!!!”&#xff1b; 之后的第k项由第k−2项第k−1项构成。 问第n项字符串的第c个字符是什么。 格式 输入格式&#xff1a; 两个整数n,c意义如题 输出格式&#xff1a; …

基于Python大数据的微博舆情分析,微博评论情感分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

PCB Editor简单使用

先在OrCAD软件 导出画好的图&#xff1a; 去PCBEditor软件&#xff1a; 画版图框框&#xff1a; 可以手动画也可以代码画&#xff0c;前提是使用line的操作。 命令画 x 0 0 x 1000 0 x 1000 1000 X 0 1000 X 0 0 就可以了 显示格点 修改格点&#xff1a; 导入…

transformer上手(9)—— 翻译任务

运用 Transformers 库来完成翻译任务。翻译是典型的序列到序列 (sequence-to-sequence, Seq2Seq) 任务&#xff0c;即对于每一个输入序列都会输出一个对应的序列。翻译在任务形式上与许多其他任务很接近&#xff0c;例如&#xff1a; 文本摘要 (Summarization)&#xff1a;将长…