博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
命令模式(Command)
阅读量:4973 次
发布时间:2019-06-12

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

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

 

#include 
#include
using namespace std;//命令接收者类class Receiver{public: void ActionA(string commandName) { cout << "Executing A, it's name is " << commandName << endl; } void ActionB(string commandName) { cout << "Executing B, it's name is " << commandName << endl; }};//命令抽象类class Command{protected: Receiver *receiver; //命令绑定的接收者 string commandName; //命令名称public: Command(Receiver *receiver, string commandName) { this->receiver = receiver; this->commandName = commandName; } virtual void Execute() = 0; //抽象命令执行方法(不同命令可以有不同的执行方法)};//具体命令Aclass CommandA: public Command{public: CommandA(Receiver *receiver, string commandName): Command(receiver, commandName) {} void Execute() //具体命令A执行方法 { receiver->ActionA(commandName); }};//具体命令Bclass CommandB: public Command{public: CommandB(Receiver *receiver, string commandName): Command(receiver, commandName) {} void Execute() //具体命令B执行方法 { receiver->ActionB(commandName); }};//命令发出者class Invoker{private: Command *command;public: void SetCommand(Command *command) //设置命令 { this->command = command; } void CancelCommand(Command *command) //撤销命令 { this->command = NULL; } void ExecuteCommand() //要求命令被执行 { if (command == NULL) return; command->Execute(); }};int main(){ Receiver *receiver = new Receiver(); //命令接收者 Invoker *invoker = new Invoker(); //命令发出者 Command *command1 = NULL; //命令A Command *command2 = NULL; //命令B command1 = new CommandA(receiver, "commandA"); invoker->SetCommand(command1); //命令发出者设置新命令 invoker->ExecuteCommand(); //命令发出者要求命令被执行 command2 = new CommandB(receiver, "commandB"); invoker->SetCommand(command2); invoker->ExecuteCommand(); return 0;}

  

1、可以设计一个命令队列;

2、在需要的情况下可以将命令记入日志;

3、允许接收命令的一方决定是否要否决命令;

4、可以容易地实现对命令的撤销和重做;

5、容易添加新的具体命令类。

 

命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。

转载于:https://www.cnblogs.com/onlyan/archive/2012/06/30/2571299.html

你可能感兴趣的文章
WPF编程—样式
查看>>
POJ 2817 WordStack(状态压缩DP)
查看>>
Java List&Map简单初始化方法
查看>>
canvas --> getImageData()
查看>>
python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息...
查看>>
第四次作业--测试作业
查看>>
FPGA的嵌入式乘法器
查看>>
Spring当中的生命周期的方法的几点疑问
查看>>
hls视频播放-web视频播放
查看>>
HTML基础
查看>>
Vue 学习随笔六 - Directive添加以及form绑定
查看>>
VMware 连接不上XSHELL
查看>>
Java高级架构师(一)第38节:Nginx的负载均衡模块
查看>>
《Python黑帽子:黑客与渗透测试编程之道》 自动化攻击取证
查看>>
CE修改器使用教程 [基础篇]
查看>>
C++获取系统信息(IP地址、硬件信息等)
查看>>
windows下python常用库的安装
查看>>
1-3.ag2基础知识-你好世界
查看>>
白话SSL协议的握手过程
查看>>
华中农业大学校赛--c The Same Color
查看>>