设计模式C++描述----19.命令(Command)模式
来源:互联网 发布:python signal 编辑:程序博客网 时间:2024/05/16 05:21
一. 举例说明
我们知道,在多线程程序中,多个用户都给系统发 Read 和 Write 命令。这里有几点需要说明:
1. 首先明确一点,所有的这些 Read 和 Write 命令都是调用一个库函数。
2. 用户并不需要知道别的用户的存在,也不管别人发不发命令,只管自己发命令,最后给结果即可。
3. 这些命令先是到了一个消息队列里面,然后由消息队列调用库函数。
结构图如下:
代码如下:
class Command;//实施与执行类class Reciever { public: void Action(){cout<<"Do action !!"<<endl;}};//抽象命令类class Command { public: virtual ~Command() {}virtual void Excute() = 0;protected: Command() {}};//Read 命令class Read_Command:public Command { public: Read_Command(Reciever* rev){this->_rev = rev;}~Read_Command(){delete this->_rev;}void Excute(){cout<<"Read Command..."<<endl; _rev->Action();}private: Reciever* _rev; };//Write 命令class Write_Command:public Command { public: Write_Command(Reciever* rev){this->_rev = rev;}~Write_Command(){delete this->_rev;}void Excute(){cout<<"Write_Command..."<<endl; _rev->Action();}private: Reciever* _rev; };//要求命令执行的类class Invoker{ public: Invoker(Command* cmd){_cmd = cmd;}Invoker(){}~Invoker(){delete _cmd;}//通知执行类执行void Notify(){list<Command*>::iterator it = cmdList.begin();for (it; it != cmdList.end(); ++it){_cmd = *it; _cmd->Excute();}}//添加命令void AddCmd(Command* pcmd){cmdList.push_back(pcmd);}//删除命令void DelCmd(Command* pcmd){cmdList.remove(pcmd);}private: Command* _cmd; list<Command*> cmdList;};//测试代码int main(int argc,char* argv[]) { Reciever* rev = new Reciever(); //定义一个执行类Command* cmd1 = new Read_Command(rev);//Read 命令Command* cmd2 = new Write_Command(rev);//Write 命令Invoker inv; //管理所有命令inv.AddCmd(cmd1);inv.AddCmd(cmd2);inv.Notify(); //通知执行类,执行inv.DelCmd(cmd1);inv.Notify();return 0; }
二. 命令模式
定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户时行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
优点:
1. 它能比较容易地设计一个命令队列。
2. 在需要的情况下,可以较容易地将命令记入日志。
3. 允许接收请求的一方决定是否要否决请求。
4. 可以容易地实现对请求的撤销和重做。
5. 增加新的具体命令类很容易
6. 把请求一个操作的对象(Command)与知道怎么执行一个操作的对象(Receiver)分割开来。
- 设计模式C++描述----19.命令(Command)模式
- 设计模式C++描述----19.命令(Command)模式
- Command(命令)设计模式
- 设计模式----Command(命令)模式
- 设计模式--命令模式(Command)
- [设计模式]Command命令模式
- [设计模式]命令模式(Command)
- 设计模式--命令模式Command
- 设计模式: 命令(command)模式
- 设计模式:命令模式-command
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
- 设计模式之Command(命令)
- 设计模式学习-Command(命令)
- 设计模式:Command(命令)
- 命令设计模式(Command Pattern)
- 19.Command-命令模式
- 19.Command-命令模式
- 设计模式(16)-命令模式(Command)
- jQuery设置指定表格每行第一列的宽度
- 从零开始成为优秀的项目经理
- Android TextView的双向滚动
- WHERE CURRENT OF
- Jquery 模板数据绑定插件 使用方法
- 设计模式C++描述----19.命令(Command)模式
- surfaceview中重载onKeyDown函数
- oracle 11g的OEM(企业管理器),https://主机ip:1158/em/console网页无法显示
- 一些有帮助的BLOG
- PreferenceActivity详解
- 备份恢复10——逻辑备份与恢复(emp/imp)
- 交警处理高速事故时遭遇车祸殉职
- linux系统查看HBA光线卡WWN号
- time_t start, end;time(&end); total_time = (long) difftime(end, start)