命令模式----C++实现

2014-11-24 07:49:59 · 作者: · 浏览: 0

命令模式

定义:

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

适用性:

当有如下需求时,可以用命令模式:

1、 想抽象出待执行的动作以参数化某对象。命令模式是回调机制的一个面向对象的替代品。

2、 在不同的时刻指定,排列和执行请求。

3、 支持取消操作。

4、 支持修改日志。

5、 用构建在原语操作上的高层操作构造一个系统。

结构:

\

实现:

//命令接收者< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHAgYWxpZ249"left">class Receiver

{

public:

voiddoSomething()

{

cout<<"Receiver doSomething"<

}

};

//抽象的命令类

class Command

{

public:

virtual void Execute() {}

virtual ~Command(){}

};

//具体命令类

class ConcreteCommand1:public Command

{

public:

ConcreteCommand1(Receiver*pReceiver):m_pReceiver(pReceiver)

{ }

voidExecute()

{

cout<<"ConcreteCommand1 Execute"<

m_pReceiver->doSomething();

}

private:

Receiver *m_pReceiver;

};

class ConcreteCommand2:public Command

{

public:

ConcreteCommand2(Receiver*pReceiver):m_pReceiver(pReceiver)

{ }

voidExecute()

{

cout<<"ConcreteCommand2 Execute"<

m_pReceiver->doSomething();

}

private:

Receiver *m_pReceiver;

};

//调用者

class Invoker

{

public:

voidSetCommand(Command *pCommand)

{

m_pCommand = pCommand;

}

voidAction()

{

m_pCommand->Execute();

}

private:

Command *m_pCommand;

};

Invoker *pInvoker = new Invoker;

Receiver *pR = new Receiver;

Command *pCommand1 = new ConcreteCommand1(pR);

Command *pCommand2 = new ConcreteCommand2(pR);

pInvoker->SetCommand(pCommand1);

pInvoker->Action();

pInvoker->SetCommand(pCommand2);

pInvoker->Action();

\