設計模式之九 命令模式

2021-07-26 14:48:18 字數 1433 閱讀 9533

命令模式(command pattern):是乙個高內聚的模式。

定義: encapsulate a request as an object , thereby letting you parameterize clients with different requests ,queue or long requests, and support undoable operations.(將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。)

通用類圖:

receive接收者角色:命令傳遞到這裡應該被執行的。

command 命令角色: 需要執行的所有命令都在這裡宣告。

invoker 呼叫者角色 :接收到命令,並執行命令。

優點:1、類間解耦:  呼叫者角色和接收者角色之間沒有任何依賴關係,呼叫者實現功能只需呼叫command抽象類的execute方法就可以,不需要了解到底是哪個接收者

2、可擴充套件性:command的子類可以非常容易的擴充套件,而呼叫者invoker和高層次的模組client不產生嚴重的**耦合

缺點:如果有n個命令,command的子類就可能是n個,導致類膨脹得非常大

實現:

/// /// 通用receive類

///

public abstract class reveiver

/// /// 具體的receiver類

///

public class concretereciver1 : reveiver

}public class concretereciver2 : reveiver

}/// /// 抽象的command類

///

public abstract class command

/// /// 具體的command類1

///

public class concretecommand1 : command

public void execute()

}/// /// 具體的command類2

///

public class concretecommand2 : command

public void execute()

}/// /// 呼叫者invoker類

///

public class invoker

//執行命令

設計模式之命令設計模式

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

設計模式之命令模式

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

設計模式之命令模式

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