C++設計模式-Command

來源:互聯網
上載者:User

將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤消操作。

解析;
將命令封裝在一個類中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;
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.