命令模式

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

命令模式的好处:
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.hqwc.cn/news/625136.html

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

相关文章

VScode插件发布

背景 上期在初涉 VS Code 插件开发-CSDN博客中&#xff0c;通过Yeoman工具创建了第一个插件项目&#xff0c;在helloworld的基础上修改&#xff0c;实现预期的功能后&#xff0c;需要将VScode插件发布到插件市场中使用。 官方文档&#xff1a;Publishing Extensions | Visual…

Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation论文速读

文章目录 Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation摘要方法Domain-Distance-Modulated Spectral Sensitivity (DoDiSS&#xff09;模块Sensitivity-Guided Spectral Adversarial Mixup (SAMix)模块 实验结果 Spectral Adversarial MixUp for F…

Vue(二)

文章目录 1.条件渲染1.关于js中的false的判定2.基本介绍3.v-if1.需求分析2.代码实例 4.v-show实现5.v-if与v-show比较6.课后练习 2.列表渲染1.代码实例2.课后练习 3.组件化编程1.基本介绍2.实现方式一_普通方式2.实现方式二_全局组件方式3.实现方式三_局部组件方式 4.生命周期和…

十大排序——11.十大排序的比较汇总及Java中自带的排序算法

这篇文章对排序算法进行一个汇总比较&#xff01; 目录 0.十大排序汇总 0.1概述 0.2比较和非比较的区别 0.3基本术语 0.4排序算法的复杂度及稳定性 1.冒泡排序 算法简介 动图演示 代码演示 应用场景 算法分析 2.快速排序 算法简介 动图演示 代码演示 应用场景…

2024年4月最新版GPT

2024年4月最新版ChatGPT/GPT4, 附上最新的使用教程。 随着人工智能技术的不断发展&#xff0c;ChatGPT和GPT4已经成为了人们日常生活中不可或缺的助手。2024年4月,OpenAI公司推出了最新版本的GPT4,带来了更加强大的功能和更加友好的用户体验。本文将为大家带来最新版GPT4的实用…

Day91:API攻防-接口安全SOAPOpenAPIRESTful分类特征导入项目联动检测

目录 API分类特征-SOAP&OpenAPI&RESTful API分类特征 API常见漏洞 API检测流程 API检测项目-Postman&APIKit&XRAY 工具自动化-SOAP - WSDL Postman 联动burpxray APIKit插件(可联动xray) 工具自动化-OpenApi - Swagger Postman 联动burpxray APIKit…

机器学习和深度学习--李宏毅(笔记与个人理解)Day17

Day 17Convolutional Neyral Network (CNN) 卷积神经网络一般都用在image 上面比较多一些&#xff0c;所以课程的例子大多数也都是image Image Classification the same size how about for pc? 这里对于tensor 张量这个概念&#xff0c;我还是比较奇怪&#xff0c;在我认为一…

JDK5.0新特性

目录 1、JDK5特性 1.1、静态导入 1.2 增强for循环 1.3 可变参数 1.4 自动装箱/拆箱 1.4.1 基本数据类型包装类 1.5 枚举类 1.6 泛型 1.6.1 泛型方法 1.6.2 泛型类 1.6.3 泛型接口 1.6.4 泛型通配符 1、JDK5特性 JDK5中新增了很多新的java特性&#xff0c;利用这些新…

5.10 mybatis之useActualParamName作用

文章目录 1. useActualParamNamefalse1.1 单个参数映射1.2 多个数1.3 param注解 2. useActualParamNametrue useActualParamName官方解释&#xff1a;允许使用方法签名中的名称作为语句参数名称。 为了使用该特性&#xff0c;你的项目必须采用 Java 8 编译&#xff0c;并且加上…

Linux内核之aligned用法实例(四十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

KaiwuDB CTO 魏可伟:AIoT,用行业定义数据库

4月12日&#xff0c;由中国 DBA 联盟&#xff08;ACDU&#xff09;与墨天轮社区联合主办的第十三届数据技术嘉年华&#xff08;DTC 2024&#xff09;于北京盛大召开。KaiwuDB CTO 魏可伟受邀发表《智创当下&#xff0c;KaiwuDB 从多模到 AI 的探索实践》主题演讲&#xff0c;向…