設計模式之命令模式

2021-06-22 16:30:53 字數 1343 閱讀 8058

1、命令模式(commond),將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。

uml圖如下:

2、命令模式作用的優點

第一,它能較容易地設計乙個命令佇列;第二,在需要的情況下,可以較容易地將命令記入日誌;第三,允許接收者請求的一方決定是否要否決請求;第四,可以容易地實現對請求的撤銷和重做;第五,由於加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易。命令模式把請求乙個操作的物件與知道怎麼執行乙個操作的物件分隔開。

敏捷開發原則告訴我們,不要為**新增基於猜測的,實際不需要的功能。如果不清楚乙個系統是否需要命令模式,一般就不要著急去實現它,事實上,在需要的時候通過重構實現這個模式並不困難,只有在真正需要如撤銷/恢復操作等功能時,把原來的**重構為命令模式才有意義。

3、c++**實現如下:

[cpp]view plain

copy

#include 

using

namespace

std;  

/*receiver類,知道如何實施與執行乙個與請求相關的操作

任何類都可以作為乙個接收者

*/class

receiver  

;  void

receiver::action()   

/*command類,用來宣告執行操作的介面

*/class

command  

;  command::command(receiver * p_receiver)   

/*concretecommand類,將乙個接收者物件繫結於乙個動作

呼叫接收者相應的操作,以實現相應操作,以實現execute

*/class

concretecommand : 

public

command  

;  concretecommand::concretecommand(receiver * p_receiver) : command(p_receiver)  

void

concretecommand::execute()   

/*invoker類,要求該命令執行這個請求

*/class

invoker  

;  void

invoker::setcommand(command * p_command)   

void

invoker::executecommand()   

/*客戶端**,建立乙個具體命令物件,並

設計它的接收者。

*/int

main()    

設計模式之命令設計模式

先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...

設計模式之命令模式

command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...

設計模式之命令模式

當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖 如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。命令設計模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行...