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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年03月11日 15时02分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mysql数据库断电恢复_MySQL数据库InnoDB引擎下服务器断电数据恢复方法
2019-04-21
python入门程序异常_Python 入门 之 异常处理
2019-04-21
python 键盘输入int_Python编程 Python如何获取数据
2019-04-21
mysql 查询姓王_MySQL查询语句练习题,测试足够用了
2019-04-21
mysql多实例脚本_mysql多实例脚本
2019-04-21
python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构
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
mysql 取两个时间差 php_在php和MySql中计算时间差的方法详解
2019-04-21
mysql 重启数据库实例_mysql 单机多实例重启数据库服务
2019-04-21