設計模式之命令模式

2022-01-10 02:52:46 字數 942 閱讀 5408

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

命令模式是對命令進行封裝,由呼叫者發起命令請求,接收者執行請求。

當我們呼叫時,執行的時序首先是呼叫者類,然後是命令類,最後是接收者類。

也就是說一條命令的執行被分成了三步,它的耦合度要比把所有的操作都封裝到乙個類中要低的多,

而這也正是命令模式的精髓所在:把命令的呼叫者與執行者分開,使雙方不必關心對方是如何操作的。

基本結構:

來看乙個示例:

public class receiver

}public abstract class command

public class concretecommand : command

public override void execute()

}public class invoker

public void executecommand()

}var receiver = new receiver();

var command = new concretecommand(receiver);

var invoker = new invoker();

invoker.setcommand(command);

invoker.executecommand();

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

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

落實到編碼實現,命令模式用到最核心的實現手段,就是將函式封裝成物件。

設計模式之命令設計模式

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

設計模式之命令模式

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

設計模式之命令模式

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