c++之命令模式
发布日期:2021-09-25 21:40:58 浏览次数:1 分类:技术文章

本文共 1845 字,大约阅读时间需要 6 分钟。

命令模式

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

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

代码

#include
#include
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
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;}

效果:

转载地址:https://blog.csdn.net/c_shell_python/article/details/107518471 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++之中介者模式
下一篇:c++之桥接模式

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年03月11日 15时02分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

由于连接方在一段时间后没有正确答复或连接的主机_新风换气机使用效果不佳,为何?掌握正确使用方法就好了... 2019-04-21
mysql数据库断电恢复_MySQL数据库InnoDB引擎下服务器断电数据恢复方法 2019-04-21
python入门程序异常_Python 入门 之 异常处理 2019-04-21
python 键盘输入int_Python编程 Python如何获取数据 2019-04-21
h3c trunk口改access_H3CNE配置VLAN的Access链路端口和Trunk链路端口 2019-04-21
mysql 查询姓王_MySQL查询语句练习题,测试足够用了 2019-04-21
mysql多实例脚本_mysql多实例脚本 2019-04-21
python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构 2019-04-21
python获取post请求中的所有参数_Django从POST reques获取请求参数 2019-04-21
mysql加密复制_MySQL主从复制使用SSL加密 2019-04-21
python启动远端 exe_python打包exe开机自动启动的实例(windows) 2019-04-21
java当前路径_java获取当前路径的几种方法 2019-04-21
java web传递参数_Javaweb的八种传值方式 2019-04-21
java gui支持的包有哪两个_Java GUI 2019-04-21
java list详解_java集合List解析 2019-04-21
java坐标代码_java实现计算地理坐标之间的距离 2019-04-21
kettle调用java程序_Kettle ETL调用 java代码来进行数据库的增删改查 2019-04-21
mysql 取两个时间差 php_在php和MySql中计算时间差的方法详解 2019-04-21
mysql 重启数据库实例_mysql 单机多实例重启数据库服务 2019-04-21
collator java_Java Collator getInstance(Locale)用法及代码示例 2019-04-21