蜗牛的家
男儿当自强
posts - 48,  comments - 21,  trackbacks - 0
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消操作。

解析;
将命令封装在一个类中Command类,同时把接收对象也封装在一个类中Receiver类,调用这个命令的类Invoker类,与注册回调函数的原理相似。

#include "stdafx.h"
#include <iostream>
using namespace std;

//Command模式的封装,解除了业务逻辑与实际抽象之间的耦合,且支持事物操作
class Command
{
public:
    virtual ~Command(){}
    virtual void Execute() = 0;
};

class Receiver
{
public:
    void Action() {cout << "fact active\n";}
};
//根据初始化的不同,生成不同用途的命令类
class ConCreateCommand : public Command
{
public:
    ConCreateCommand(Receiver* pReceiver):m_pReceiver(pReceiver) {}
    virtual ~ConCreateCommand();

    virtual void Execute();
private:
    Receiver* m_pReceiver;
};
class Invoker
{
public:
    Invoker(Command *pCommand):m_pCommand(pCommand) {}
    ~Invoker();
    //可实现do与undo函数,添加一系列命令或是取消某些命令形成一个事物
    void invoke();//回调命令函数
private:
    Command *m_pCommand;
};
///////////////////////////////////////////////////////////////////////////
Invoker::~Invoker()
{
    delete m_pCommand;
    m_pCommand = NULL;
}
void ConCreateCommand::Execute()
{
    if (NULL != m_pReceiver)
        m_pReceiver->Action();

    cout << "Execute by ConCreateCommand\n";
}
void Invoker::invoke()
{
    if (NULL != m_pCommand)
        m_pCommand->Execute();
}
ConCreateCommand::~ConCreateCommand()
{
    delete m_pReceiver;
    m_pReceiver = NULL;
}
///////////////////////////////////////////////////////////////////////////
int _tmain(int argc, char* argv[])
{
    Receiver* pReceiver = new Receiver;
    Command* pCommand = new ConCreateCommand(pReceiver);
    Invoker* pInvoker = new Invoker(pCommand);
    
    /*
    pInvoker->do(pCommand);
    pInvoker->do(pCommand1);
    pInvoker->undo();
    pInvoker->invoke();
    */
    pInvoker->invoke();

    delete pInvoker;

    system("pause");
    return 0;
}


posted on 2008-08-20 23:32 黑色天使 阅读(702) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

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



<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜