[設計模式]Command命令模式

來源:互聯網
上載者:User
command命令模式

Command模式通過將請求封裝到一個對象(Command)中,並將請求的接收者存放到具體的ConcreteCommand類中的(reciver)中,從而實現叫用作業的對象和操作的具體實現之間的解耦。

解析:Command模式的思想是把命令封裝在一個類(Command)中,同時把接收對象也封裝在一個類(Receive)中,由調用這個命令的類(Invoker)來調用。其實,如果弄清楚了Command模式的原理,就會發現其實它和註冊回呼函數的原理很相似,而在面向過程的設計中的回呼函數其實和這裡的Command類的作用是一致的。採用Command模式解耦了命令的發出者和命令的執行者。

小demo

command.h

#ifndef COMMAND_H#define COMMAND_Hclass Command{public:virtual ~Command() {}virtual void Execute() = 0;};class Receiver{public:void Action();};class Invoker{public:Invoker(Command *pCommand);~Invoker();void Invoke();private:Command *m_pCommand;};class ConcreateComand: public Command{public:ConcreateComand(Receiver* pReceiver);virtual ~ConcreateComand();virtual void Execute();private:Receiver* m_pReceiver;};#endif

command.cpp

#include "Command.h"#include <iostream>void Receiver::Action(){std::cout << "Receiver Action\n";}Invoker::Invoker(Command *pCommand): m_pCommand(pCommand){}Invoker::~Invoker(){delete m_pCommand;m_pCommand = NULL;}void Invoker::Invoke(){if (NULL != m_pCommand){m_pCommand->Execute();}}ConcreateComand::ConcreateComand(Receiver* pReceiver): m_pReceiver(pReceiver){}

 

main.cpp

#include "Command.h"#include <stdlib.h>int main(){Receiver* pReceiver = new Receiver();Command*  pCommand  = new ConcreateComand(pReceiver);Invoker*  pInvoker  = new Invoker(pCommand);pInvoker->Invoke();delete pInvoker;system("pause");return 0;}

Command模式的思想非常簡單,但是Command模式也十分常見,並且威力不小。實際上,command模式關鍵就是提供一個抽象的command類,並將執行操作封裝到command類介面中,command類中一般就只是一些介面的集合,並不包含任何的資料屬性。好處有:

1.command模式將叫用作業的對象和知道如何?該操作的對象解耦。在command的結構圖中,Invoker對象根本就不知道具體的是哪個對象在處理Excute操作(當然要知道是Command類別的對象,也僅此而已)。

2.在command要增加新的處理操作對象很容易,我們可以通過建立新的繼承自command的子類來實現這一點。

3.command模式可以喝memento模式結合起來,支援取消的操作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.