設計模式之美28 命令模式

2021-10-24 01:59:33 字數 1439 閱讀 9942

定義:命令模式將請求(命令)封裝為乙個物件,這樣可以使用不同的請求引數化其他物件(將不同請求依賴注入到其他物件),並且能夠支援請求(命令)的排隊執行、記錄日誌、撤銷等(附加控制)功能。

使用不多

命令模式用的最核心的實現手段,是將函式封裝成物件。但是,在大部分程式語言中,函式沒法兒作為引數傳遞給其他函式,也沒法兒賦值給變數。借助命令模式,我們可以將函式封裝成對

象。具體來說就是,設計乙個包含這個函式的類,例項化乙個物件傳來傳去,這樣就可以實現把函式像物件一樣使用。

命令模式的主要作用和應用場景,是用來控制命令的執行,比

如,非同步、延遲、排隊執行命令、撤銷重做命令、儲存命令、給命令記錄日誌等等,這才是命令模式能發揮獨一無二作用的地方。

整個手遊後端伺服器輪詢獲取客戶端發來的請求,獲取到請求之後,借助命令模式,把請求包含的資料和處理邏輯封裝為命令物件,並儲存在記憶體佇列中。然後,再從佇列中取出一定數量的命令來執行。執行完成之後,再重新開始新的一輪輪詢。具體的示例**如下所示,你可以結合著一塊看下。

public

inte***ce

command

public

class

gotdiamondcommand

implements

command

@override

public

void

execute()

}//gotstartcommand/hitobstaclecommand/archivecommand類省略

public

class

else

if(event.

equals

(event.got_star)

)else

if(event.

equals

(event.hit_obstacle)

)else

if(event.

equals

(event.archive)

)// ...一堆else if...

queue.

add(command);}

int handledcount =0;

while

(handledcount < max_handled_req_count_per_loop)

command command = queue.

poll()

; command.

execute()

;}}}

}```

**實到編碼實現,命令模式用到最核心的實現手段,就是將函式封裝成物件。我們知道,在大部分程式語言中,函式是沒法作為引數傳遞給其他函式的,也沒法賦值給變數。借助命令模式,我們將函式封裝成物件,這樣就可以實現把函式像物件一樣使用。*

*

設計模式之命令設計模式

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

設計模式之命令模式

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

設計模式之命令模式

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