命令模式详解

news2024/11/24 13:28:04

命令模式

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

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

与其他模式比较

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

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

代码

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.coloradmin.cn/o/2082278.html

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

相关文章

SQLi-LABS通关攻略【41-45】

SQLi-LABS 41关 这一关是堆叠注入 测试闭合 ?id1 //回显错误 ?id1-- //回显错误 ?id1-- //回显正确 所以是数字型的注入 测试堆叠注入&#xff0c;更改Dumb的密码 ?id1;update users set password123456 where usernameDumb-- SQLi-…

2008-2024年名爵汽车维修手册和电路图线路图接线图资料更新

经过整理&#xff0c;2009-2024年名爵汽车全系列已经更新至汽修帮手资料库内&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表…

潜水装备制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

潜水装备制造行业正经历一场前所未有的变革&#xff0c;5G智能工厂物联数字孪生平台的引入&#xff0c;无疑成为了推动这一行业乃至整个制造业数字化转型的重要驱动力。5G智能工厂物联数字孪生平台作为一种前沿技术&#xff0c;逐渐进入人们的视野。该平台通过集成物联网、大数…

idea配置类注释模板

设置类注释模板 IDEA --> Settings... --> Editor --> File and Code Templates --> Includes -->File Header /** * ClassName: ${NAME} * Package: ${PACKAGE_NAME} * Description: * Datetime: ${DATE} ${TIME} * Author: zhouxl …

2008-2020年 中国健康与养老追踪调查CHARLS数据合集

中国健康与养老追踪调查&#xff08;China Health and Retirement Longitudinal Study, CHARLS&#xff09;是一项由北京大学国家发展研究院主持的大型跨学科调查项目。该项目始于2011年&#xff0c;每两到三年对样本进行一次追踪调查&#xff0c;旨在收集代表中国45岁及以上中…

51单片机-点亮一个LED

2024.8.28 作者&#xff1a;Whappy 目的&#xff1a;学习51单片机&#xff08;0基础&#xff09; 代码&#xff1a; #include <REGX52.H>void main(void) {P2 0xAA; } 现象&#xff1a;

在idea中回滚到某节点并push到远程仓库

一 操作说明 1.1 前提准备 如果是master分支&#xff0c;需要取消master分支保护机制。 去掉保护机制&#xff1a; 1.2 具体操作步骤 1.回滚到具体节点&#xff1a; a)强制reset b&#xff09;选择【hard】选项 2.强制push a&#xff09;选择 force push b&#xff09;选择…

从黑神话悟空看中医养生,各位“天命人”中医养生不了解一下吗?

在国产3A大作《黑神话&#xff1a;悟空》世界里&#xff0c;我们不仅被“天命人”的英勇无畏所震撼&#xff0c;更被那些蕴含深意的道具设计所吸引。今天&#xff0c;三好夫人就和大家一起聊一聊游戏中的“三冬虫”、“铁皮银参”、“落伽香藤”这三大神秘道具出发&#xff0c;…

双重映射+逆向并查集+恢复

前言&#xff1a;一开始没有想着要逆序&#xff0c;自己写了一个并查集但是过了百分之五十&#xff0c;也不知道哪里出了问题 这一题的本质我们要知道&#xff0c;后面的修改覆盖前面的修改&#xff0c;我们直接从后面开始操作就行&#xff0c;然后我们这一题的恢复也是有技巧…

PowerDesigner16.5 从mysql5.7逆向工程

参考&#xff1a;https://blog.csdn.net/vfsdfdsf/article/details/89839991 我的环境 &#xff1a;mysql5.7.18 。PowerDesigner16.5 1、安装mysql的odbc驱动 下载地址&#xff1a;https://dev.mysql.com/downloads/connector/odbc/ 打开页面如下图&#xff0c;我这里下载…

短剧APP系统开发,为市场带来更多机遇

近几年&#xff0c;短剧经历了爆发式增长&#xff0c;在短时间内市场规模迅速扩大&#xff0c;如今更是出现越来越多内容优质、新颖的短剧让大众眼前一亮&#xff0c;吸引了越来越多的短剧观众。 在数字化时代中&#xff0c;短剧系统的开发&#xff0c;为市场带来了技术创新和…

数据分析在提高灌区管理水平中的作用

数据分析在提升灌区管理水平中扮演着至关重要的角色&#xff0c;它通过深度挖掘海量信息&#xff0c;为灌溉系统的高效运作、资源优化配置及可持续发展提供了科学决策的基础。这一过程不仅涉及数据的收集、整理与分析&#xff0c;还涵盖了利用现代信息技术对灌溉活动进行精细化…

大数据分析与挖掘技术实训室解决方案

一、大数据分析与挖掘技术概述 大数据分析与挖掘技术是指运用算法、工具和技术处理和分析大规模数据集的过程。这些数据集来源于多个渠道&#xff0c;例如传感器数据、社交媒体数据、网络日志和金融交易记录等。其目标是在这些海量数据中发现有价值的信息、模式和趋势&#xf…

GEE APP:利用夜间灯光数据建立一个简易的逐年影像查看器

简介 很多时候我们可以通过简单的滑块进行逐年影像的查看&#xff0c;slider这个工具可以进行每一年的夜间灯光数据的查看&#xff0c;这里主需要设定其实和后续的年份&#xff0c;另外&#xff0c;并给每一年进行属性设定对应的影像即可。这里最关键的就是一个返回值函数的设…

2059-Authentication plugin ‘caching_sha2_password‘ cannot be loaded

使用Navicat连接mysql数据库报错&#xff1a; 2059-Authentication plugin caching_sha2_password cannot be loaded 该错误的原因是在MySQL8之前版本中加密规则mysql_native_password&#xff0c;而在MySQL8以后的加密规则为caching_sha2_password。 解决此问题有两种方法:…

趣味算法------拯救阿拉德大陆

目录 ​编辑 题目描述&#xff1a; 思路解析&#xff1a; 具体代码&#xff1a; 总结&#xff1a; 题目描述&#xff1a; 此时一批勇士也随之而来&#xff0c;但其能力也是参差不齐&#xff0c;我们需要挑选出最优秀的勇士来守护这片大陆。每位勇士都有属于自己的编号&am…

FPGA第 8 篇,硬件描述语言Verilog HDL,初识Verilog HDL

前言 我们都知道 FPGA 是一种高度可编程的集成电路&#xff0c;适用于实现各种数字逻辑功能&#xff0c;而 Verilog HDL是一种广泛使用的硬件描述语言&#xff08;Hardware Description Language, HDL&#xff09;&#xff0c;主要用于数字电子系统的描述、仿真和综合&#xff…

BaseCTF-Web-Week2-WP

目录 1、ez_ser 2、 一起吃豆豆 3、你听不到我的声音 4、Really EZ POP 5、RCEisamazingwithspace 6、以你说你懂 MD5? 7、数学大师 1、ez_ser 简单的 pop 链构造&#xff0c;关于反序列化的魔术方法、 pop 链构造的详细讲解参考我之前的博客&#xff1a; CTF - Web 干…

医生百度百科创建技巧分享

医生百度百科创建技巧分享 #医生百科 #百科创建 百收网SEO&#xff0c;我是一名医生&#xff0c;想要创建百度百科&#xff0c;有没有技巧分享&#xff1f; 当然有了&#xff0c;医生百科审核相对来说比较严格&#xff0c;必须要有医师执业证书才能申请。 掌握下面小技巧&am…

使用Python调用JavaScript进行网页自动化操作

随着互联网技术的飞速发展&#xff0c;网页自动化操作在数据抓取、用户界面测试、内容管理等多个领域变得越来越重要。Python作为一种流行的编程语言&#xff0c;因其简洁的语法和强大的库支持&#xff0c;成为了许多开发者进行网页自动化的首选工具。然而&#xff0c;面对动态…