c qt設計模式 命令模式

2021-08-15 11:54:44 字數 4288 閱讀 6493

文章中部分內容和思路來自《head first設計模式》

將"請求"封裝成物件,以便使用不同的請求、佇列或日誌來引數化其他物件。命令模式也支援可撤銷的

1.案例說明

假設客戶去銀行辦理訪問款業務,業務員根據客戶業務的不同對客戶賬戶進行訪問款操作。在這個案例中,我們可以將業務員看做命令的發出者,客戶賬號看做命令接收者,具體命令是存款取款

2.**實現

----------

icommond.h

----------

#ifndef

icommond_h

#define

icommond_h

class

icommond

;
#endif

//icommond_h

----------------

moneyincommond.h

----------------

#ifndef

moneyincommond_h

#define

moneyincommond_h

#include

"icommond.h"

#include

"account.h"

class

moneyincommond

:public

icommond

;
#endif

//moneyincommond_h

------------------

moneyincommond.cpp

------------------

#include

"moneyincommond.h"

moneyincommond::moneyincommond(account

*acc,

float

amount)

moneyincommond::~moneyincommond

()

void

moneyincommond::execute

()

-----------------

moneyoutcommond.h

-----------------

#ifndef

moneyoutcommond_h

#define

moneyoutcommond_h

#include

"icommond.h"

#include

"account.h"

class

moneyoutcommond

:public

icommond

;
#endif

//moneyoutcommond_h

-------------------

moneyoutcommond.cpp

-------------------

#include

"moneyoutcommond.h"

moneyoutcommond::moneyoutcommond(account

*acc,

float

amount)

moneyoutcommond::~moneyoutcommond

()

void

moneyoutcommond::execute

()

---------

account.h

---------

#ifndef

account_h

#define

account_h

class

account

;
#endif

//account_h

-----------

account.cpp

-----------

#include

"account.h"

account::account()
void

account::moneyin(float

value)

void

account::moneyout(float

value)

float

account::gettotal()

const

---------

invoker.h

---------

#ifndef

invoker_h

#define

invoker_h

#include

"icommond.h"

class

invoker

;
#endif

//invoker_h

-----------

invoker.cpp

-----------

#include

"invoker.h"

invoker::invoker()
void

invoker::setcommond(icommond

*cmd)

void

invoker::commondexecute()

--------

main.cpp

--------

/**

*設計模式-命令模式

*要素:1,執行者

2,抽象命令

3,具體命令

4,接受者[作用物件]

*/

#include

#include

#include

"account.h"

#include

"invoker.h"

#include

"moneyincommond.h"

#include

"moneyoutcommond.h"

int

main(int

argc,

char

*argv)

案例不太好,但基本能說明問題,《head first》一書中舉了乙個遙控器的例子,有興趣的可以看看

設計模式 命令設計模式

一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...

設計模式 命令模式

1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...

設計模式 命令模式

1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...