(十九)命令模式
2016-03-14 14:51
302 查看
定义:命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行
参数化;对请求排队或记录请求日志,以及支持可撤销的操作。【DP】
UML:
基本代码:
输出:
优点:
1.它能较容易地设计一个命令队列;
2.在需要的情况下,可以较容易地将命令记入日志;
3.允许接收请求的一方决定是否要否决请求;
4.可以容易地实现对请求的撤销和重做;
5.由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易;
6.命令模式将请求一个操作的对象与知道怎么执行一个操作的对象分割开【DP】
应用:
在敏捷开发时,不要为代码添加基于猜测的,实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要着急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义。
定义:命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行
参数化;对请求排队或记录请求日志,以及支持可撤销的操作。【DP】
UML:
基本代码:
// Command.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class Receiver { public: void Action() { cout << "执行请求!" << endl; } }; class Command { public: virtual ~Command(){} Command(Receiver *recv){this->receiver = recv;} virtual void Excute() = 0; protected: Receiver *receiver; }; class ConcreteCommand : public Command { public : ConcreteCommand(Receiver *receiver) : Command(receiver){ } void Excute(){receiver->Action();} }; class Invoker { private: Command *command; public: void SetCommand(Command *command) { this->command = command; } void ExecuteCommand() { command->Excute(); } }; int _tmain(int argc, _TCHAR* argv[]) { Receiver *r = new Receiver(); Command *c = new ConcreteCommand(r); Invoker *i = new Invoker(); // Set and execute command i->SetCommand(c); i->ExecuteCommand(); return 0; }
输出:
优点:
1.它能较容易地设计一个命令队列;
2.在需要的情况下,可以较容易地将命令记入日志;
3.允许接收请求的一方决定是否要否决请求;
4.可以容易地实现对请求的撤销和重做;
5.由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易;
6.命令模式将请求一个操作的对象与知道怎么执行一个操作的对象分割开【DP】
应用:
在敏捷开发时,不要为代码添加基于猜测的,实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要着急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义。
相关文章推荐
- POJ 1077-Eight(BFS+优先队列)
- InvocationTargetException异常解析
- 教你在VirtualBox 安装 Ubuntu 15.04
- java实现计算器
- query的结构某字段如何在WEIBI上单独定义格式
- 解决android FragmentTabHost + viewpager + fragment 嵌套布局切换出现白屏什么都没有问题
- 为ubuntu服务器安装gnome图形桌面
- InvocationTargetException异常解析
- InvocationTargetException异常解析
- MySql int性数据表
- Android riple material 点击水波纹效果
- WPF控件模板
- 手游项目总结
- 三种LVS负载均衡技术的优缺点----负载均衡调度算法
- 为ubuntu服务器安装gnome图形桌面
- 教你在VirtualBox 安装 Ubuntu 15.04
- 使用Pattern查找字符串
- 解析C++函数的默认参数和占位参数及较之C语言的拓展
- lua-协成
- Linux之tar 压缩解压 加密解密