读书人

C++设计形式-命令模式

发布时间: 2013-10-08 17:12:09 作者: rapoo

C++设计模式---命令模式

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

命令模式结构图:

C++设计形式-命令模式

Command类,用来声明执行操作的接口。

class Command

{

protected:

Receiver *receiver;

public:

Command(Receiver * receiver)

{

this->receiver = receiver;

}

virtual void Execute()=0;

};

ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute。

class ConcreteCommand : Command

{

public:

ConcreteCommand(Receiver * receiver):Command(recciver){}

void Execute()

{

receiver->Action();

}

};

Invoker类,要求该命令执行这个请求。

class Invoker

{

private:

Command * command;

public:

void SetCommand(Command * command)

{

this->command= command;

}

void ExecuteCommand()

{

command->Execute();

}

};

Receiver类,知道如何实施与执行一个与请求相关的操作,任何类都可能做为一个接收者。

class Receiver

{

public:

void Action()

{

cout<< “执行请求!”<<endl;

}

};

客户端代码,创建一个具体命令对象并设定它的接收者。

void main()

{

Receiver *r = new Receiver();

Command *c = new ConcreteCommand(r);

Invoker *I = new Invoker();

i->SetCommand(c);

i->ExecuteCommand();

}

命令模式作用:

1. 他能较容易地设计一个命令队列;

2. 在需要的情况下,可以较容易地将命令记入日志;

3. 允许接收请求的一方决定是否要否决请求

4. 可以容易地实现对请求的撤销和重做;

5. 由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容量。

读书人网 >软件开发

热点推荐