c++之命令模式

c++命令模式 c++命令模式详细介绍 阅读详情

命令模式

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

场景栗子:通信兵接收到司令官的命令,将这些命令发送给作战部队。

代码

#include<iostream>
#include <list>

using namespace std;
class Signalman;
class Action;

class Command
{
public:
	Command(Action *action)
	{
		m_action = action;
	}
	virtual void ExecuteOrder() = 0;//执行命令

protected:
	Action *m_action;
};

//行动
class Action
{
public:
	void attack(string name)
	{
		cout << "进攻高地" << name.c_str() << endl;
	}
	void retreat()
	{
		cout << "所有队伍撤退" << endl;
	}

private:
};

class AttackCommand :public Command
{
public:
	AttackCommand(Action *act,string name) :Command(act){
		m_name = name;
	}
	void ExecuteOrder(){
		m_action->attack(m_name);
	}
private:
	string m_name;
};

class RetreatCommand :public Command
{
public:
	RetreatCommand(Action *act) :Command(act){}
	void ExecuteOrder(){
		m_action->retreat();
	}
};

//通信兵
class Signalman
{
public:
	//通知军队
	void noticeArmy()
	{
		for (Command*c : m_commandList)
		{
			c->ExecuteOrder();
		}
	}
	//设置命令
	void setCommand(Command* command)
	{
		m_commandList.push_back(command);
	}
	//取消命令
	void cancelCommand(Command* command)
	{
		m_commandList.remove(command);
	}

private:
	list<Command*> m_commandList;
};

//客户端
int main()
{
	Action *act = new Action;
	Command *attack1 = new AttackCommand(act,"333");
	Command *attack2 = new AttackCommand(act, "298");
	Command *retreat = new RetreatCommand(act);

	Signalman *man = new Signalman;
	man->setCommand(attack1);
	man->setCommand(attack2);
	//下发进攻命令
	man->noticeArmy();

	cout << "----------久攻不下,损失惨重--------------" << endl;
	man->cancelCommand(attack1);
	man->cancelCommand(attack2);
	man->setCommand(retreat);
	//下发撤退命令
	man->noticeArmy();

	if (act){
		delete act;
		act = nullptr;
	}
	if (man){
		delete man;
		man = nullptr;
	}
	if (attack1){
		delete attack1;
		attack1 = nullptr;
	}
	if (attack2){
		delete attack2;
		attack2 = nullptr;
	}
	if (retreat){
		delete retreat;
		retreat = nullptr;
	}

	return 0;
}

效果:

c++实现命令模式完整源代码 c++实现命令模式完整源代码CommandPattern.hppmain.cpp CommandPattern.hpp #ifndef __COMMAND_PATTERN_H__ #define __COMMAND_PATTERN_H__ #include <mutex> #include <time.h> using namespace std; // 命令队列类 #define COMMAND_QUEUE // 抽象命令类 Command class Command { 阅读详情

相关推荐

C++ 命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传递给调用对象。调用对象寻找可以处理该命令的合适对象,并把该命令传给相应的对象,该对象执行命令。

青春不老,奋斗不止! 8867

C++基础指令

1.只有一个变量时:string s1;//使用5个M来给s4初始化2.有两个变量时:string s5;s5 = s4;

L207461的博客 2985

C++中实现命令模式的详细指南

本文还有配套的精品资源,点击获取 简介:命令模式是一种行为设计模式,通过封装请求为对象,实现对不同请求的统一处理和可撤销操作。本文详细解析了命令模式在C++中的实现,包括定义命令接口、具体命令、调用者和接收者等主要角色,并提供了一个可扩展的实现框架。 1. 命令模式简介 命令模式是一种行为设计模式,它将请求封装为具有统一执行方法的对象,使你可用不同的请求对客...

weixin_42453228的博客 1368

C++常用命令

本文不对各个函数进行详细介绍,仅对本人在编程过程中使用的方法进行简单记录。 (1) string 字符串截取子串 //从Hello World!的下标为2的位置截取5个长度的字符串 string str = "Hello World!"; string str1 = str.substr(2,5); //第一个参数是截取开始的下标,第二个参数是截取的位数 cout << s...

肥羊汤 3381

Hodgkin-Huxley Model

介绍了经典的动力学模型:HH Model

weixin_73557167的博客 2473

LiveGBS流媒体平台GB/T28181实战指南:海康NVR物联网卡摄像头注册失败全链路排查与抓包技巧

本文详细解析了LiveGBS流媒体平台中海康NVR物联网卡摄像头注册失败的常见问题及解决方案。通过全链路排查与抓包技巧,包括物联网卡配置、多网卡冲突处理、防火墙设置等,帮助用户快速定位并解决GB/T28181协议下的设备注册难题,提升流媒体平台部署效率。

weixin_29290947的博客 492

C++设计模式之——命令模式

命令模式是一种行为型设计模式,它允许将请求封装为一个对象,从而使得可以参数化客户端请求、将请求排队或者记录请求日志,以及支持可撤销的操作。总的来说,命令模式的应用场景主要在于解耦请求与实现,封装接收方具体命令的实现细节,使得请求方的代码架构稳定,具备良好的扩展性。2.创建具体命令类(Concrete Command):继承自抽象命令类,实现具体的命令操作,同时持有一个命令接收者对象。在C++中,命令模式通常由一个抽象命令类、具体命令类、命令接收者类和调用者类组成。

肩上风骋的博客 2205

【SerDes】美信GMSL2-CSI调试心得

美信GMSL2加解串器芯片家族广泛应用于车载和工业视觉系统。文章介绍了MAX96717/MAX96717F加串器和MAX96724/MAX96724R解串器的关键特性,包括支持MIPI CSI-2接口、6Gbps传输速率等功能。提供了基于高通平台的demo系统配置和调试步骤,重点阐述了Link Lock、PCLK检测和Video Lock等关键调试环节,并详细说明了像素模式,隧道模式的工作原理及寄存器配置示例。文中还包含通过I2C读写寄存器的具体操作指令,取流freeze可能原因和解决方法。

qq_38089448的博客 2487

C++设计模式-命令模式

目录 基本概念 代码与实例 基本概念 命令模式(Command),将一个请求封装为对象,从而使你看用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。 命令模式的作用: 1. 能比较容易的设计一个命令队列; 2. 在需要的情况下,可以比较容易地将命令记入日志; 3. 允许接收请求...

IT1995的博客 5530

【毕业设计参考】基于yolov8+pyqt5自适应界面设计的锂电池表面缺陷检测系统

基于YOLOv8+PyQt5的锂电池表面缺陷检测系统结合了先进的目标检测技术与友好的用户界面设计,为锂电池质量检测提供了一种高效、准确的解决方案。未来,随着深度学习技术的不断发展,我们可以进一步优化模型,提高检测精度和速度,同时拓展系统功能,如实现实时视频流检测、与生产系统的深度集成等,为锂电池产业的发展注入新的活力。希望本文对大家在相关领域的研究和实践有所帮助,欢迎大家在评论区交流讨论。

1182

systrace分析 之 问题初步定位

如下surfaceflinger空缺点,上面对应的bufferTX 中有buffer,但VSYNC-SF 过来后,SurfaceFlinger却没有去取,检查测试app “android.settings”, 也没有GPU completion 时间长的问题,所以该部分可以请SurfaceFlinger的owner 进一步确认为何不取buffer。. GPU拿的是acquireFence HWC拿的是releaseFence, GPU是绘图,HWC是合成显示,这两个是互相等待的关系,

yangzex的专栏 3192

C/C++关键字解析

2、C/C++分别有多少个关键字? 假如别人问某一个关键字是否属于C/C++,要能正确的答出来。1)由ANSI标准定义的C语言关键字共32个  auto double int struct break else long switch  case enum register typedef char extern return union  const float short unsigned co

Sharp_UP的博客 1301

相机SDK开发C++篇-常用开发函数封装讲解(迈德威视相机)

/ 软触发失败,返回false } return true;= (nRet = CameraSetSysOption("NumBuffers", QString("%1").arg(getImageBufferNodeNum()).toLocal8Bit().data()))) { setLastErrorMsg("相机#%1设置缓存区数量错误,错误码:%2").arg(getCameraIndex()).arg(nRet);

GodJhin的博客 1541

C++ 设计模式:命令模式(Command Pattern)

C++ 设计模式:命令模式(Command Pattern)

冀晓武的博客 2248

Unity中语法糖带来的GC问题 ——那些看起来优雅、实际上在背后偷偷生垃圾的代码

*语法糖(Syntactic Sugar)**指的是编程语言中为了让代码更简洁、易读而提供的简便写法。比如C#中的foreachlambda表达式LINQ自动属性等。语法糖本身不是坏事,但在Unity等对GC敏感的环境下,要警惕语法糖带来的隐式内存分配。合理使用语法糖,关键场合用更“丑陋”但高效的写法,才能保证游戏流畅运行。下面我将更深入地分析Unity中语法糖导致GC的原理、具体场景、检测与优化技巧,并补充一些容易忽视的细节。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 517

Unity-TextMeshPro如何扩展材质实现字体Face+Outline流光效果

前言 TexeMeshPro 是Unity的一个Text文本插件,实现了比UGUI的Text,更好看的效果,跟高效的性能,所以深受大家的喜欢,但是再好的插件,也不是万能的,比如我们的策划有个新需求,要我们的VIP的名字比普通玩家有更好看的效果,例如:字体流光,外发光颜色扰动,字体贴图等等。那我们就需要去扩展TextMeshPRo的shader功能了。如下图所示 本文,我就带大家一起来扩展一下:如何扩展TextMeshProUGUI TextMesh原始面板 扩展功能后的面板 扩展TextMeshPro

TxNet 9675

【c++设计模式17】行为模式2:命令模式(Command Pattern)

命令模式定义了一个抽象命令(Command)接口和具体命令(Concrete Command)类,每个具体命令类都实现了抽象命令接口。命令对象包含了执行操作的方法,将请求的发送者(Invoker)和接收者(Receiver)解耦,使得请求的发送者不需要知道请求的处理细节。请求的发送者只需要通过调用命令对象的执行方法来触发请求的处理。

junxuezheng的博客 1075

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++设计模式——命令模式(command pattern)

一、原理讲解 别名动作(action),事务(transaction)。 1.1意图 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 1.2应用场景 抽象出待执行的动作以参数化某对象; 在不同的时刻指定、排列和执行请求;(比如跨进程传递命令对象) 支持取消操作; 支持修改日志,当系统奔溃时这些修改可被重做一次; 用构建在原语操作上的高层操作构造一个系统; 1.3结构图(UML图) 1.4代码实现步骤 a1 定义接口命令类Comman

净无邪博客 938

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

行为模式之命令模式(Command Pattern)C++实现

命令模式(Command Pattern)行为模式.     命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 命令模式可以用在队列请求和日志请求。   餐厅对象对应到命令模式包括:command(订单),execute()(orderUP()),Client(顾客),Invoker(女招待),Receive

xiaoding133的专栏【Stay hungry,Stay foolish】 1483

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

(三)行为模式:2、命令模式(Command Pattern)(C++示例)

介绍命令模式的含义,应用场景,优缺点,以及C++实现的实例。

bigger_belief的博客 1273

【C++】命令模式

命令模式(Command Pattern)是一种【行为型】设计模式,它将请求封装为对象,从而使你可以用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。这种模式将发起请求的对象(客户端)与执行请求的对象(接收者)解耦,通过命令对象作为中间层来协调两者。

AAADiao的博客 1249

命令模式(Command Pattern)及C++实现

命令模式是一种行为设计模式,它将请求封装为对象,实现调用者与接收者的解耦。该模式包含命令接口、具体命令、接收者、调用者和客户端五个核心角色。摘要展示了五个经典应用场景的C++实现:1)文本编辑器的撤销/重做;2)智能家居遥控器;3)支持撤销的交易系统;4)线程池任务调度;5)游戏输入处理。命令模式优势包括解耦、支持撤销/重做、事务处理、灵活扩展和队列/日志功能,适用于需要请求封装、解耦和操作记录的复杂系统设计。

追赶时代的博客 346

C++设计模式七--CommandPattern(命令模式)

C++ 设计模式 CommandPattern 命令模式

雪狼的博客 476

命令模式C++

命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为一个对象,使你可以用不同的请求对客户进行参数化,还能支持请求的排队、记录日志及撤销操作。这种模式将发送者和接收者解耦,发送者无需知道接收者的具体实现。

melonbo的专栏 512

C++ 设计模式之命令模式

命令模式同样有着很多现实场景的应用,⽐如Git中的很多操作,如提交(commit)、合并(merge)等,都可以看作是命令模式的应⽤,用户通过执⾏相应的命令来操作版本库。例如,每个按钮都有⼀个关联的 Action ,它代表⼀个命令,按钮的点击触发 Action 的执⾏。举个现实中的应⽤场景,遥控器可以控制不同的设备,在命令模式中,可以假定每个按钮都是⼀个命令对象,包含执⾏特定操作的命令,不同设备对同⼀命令的具体操作也不同,这样就可以⽅便的添加设备和命令对象。等情况下,都是⼀个有效的设计模式。

K1_uestc的博客 1956

C++实现命令模式Command Pattern

命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

优快云er_2015的博客 474
上一篇: c++之桥接模式
下一篇: c++之中介者模式
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值