您的位置:首页 > 其它

(十九)命令模式

2016-03-14 14:51 302 查看

定义:命令模式(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】

应用:

在敏捷开发时,不要为代码添加基于猜测的,实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要着急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销/恢复操作等功能时,把原来的代码重构为命令模式才有意义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: