命令模式是从界面设计中提取出来的一种分离耦合,提高重用的方法。被认为是最优雅而且简单的模式,它的应用范围非常广泛。
定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
组成:1.命令角色:( Command):声明执行操作的接口。抽象类实现。
2.具体命令角色(Concrete Command):将一个接收者对象绑定于一个运作;调用接收者相应的操作,以实现命令角色声明的执行操作的接口。
3.客户角色(Client):创建一个具体命令对象(并可以设定它的接收者)。
4.请求者角色(Invoker):调用命令对象执行这个请求。
5.接收者角色(Receiver):知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
实例:
Class Command{
public:
~virtual Command(){}
  virtual Execute() = 0;
};

class Receiver{
public:
void Action(){
std::cout << "Receiver Action\n";
}
};

class Invoker{
public:
Invoker(Command *pCommand){}
~Invoker(){
delete m_pCommand;
 m_pCommand = NULL;
}

void Invoker(){
if (NULL != m_pCommand)
 {
  m_pCommand->Execute();
 }
}

private:
Command m_pCommand;
};

class  ConcreteCommand:public Command
{
public:
ConcreteCommand(Receiver *pReceiver)
: m_pReceiver(pReceiver)
{}

virtual ~ConcreateComand()
{
delete m_pReceiver;
 m_pReceiver = NULL;
}

 virtual void Execute()
{

if (NULL != m_pReceiver)
 {
  m_pReceiver->Action();
 }

 std::cout << "Execute by ConcreateComand\n";
}
private:
 Receiver* m_pReceiver;
};

void main(){
Receiver* pReceiver = new Receiver();
Command*  pCommand  = new ConcreateComand(pReceiver);
Invoker*  pInvoker  = new Invoker(pCommand);

pInvoker->Invoke();

delete pInvoker;

}

posted on 2012-01-04 21:16 柳清风 阅读(178) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


统计