07 Pattern Note 命令模式

2022-09-15 14:39:14 字數 1751 閱讀 2683

20160109: 今天開始看命令模式,主要從概念和實現來深入理解該模式

通常來說,「行為請求者」與「行為實現者」是緊耦合的。但在某些場合,比如要對行為進行「記錄、撤銷/重做、事務」等處理,這種無法抵禦變化的緊耦合是不合適的。在這些情況下,將「行為請求者」與「行為實現者」解耦,實現二者之間的松耦合就至關重要。命令模式是解決這類問題的乙個比較好的方法。

labview中典型的生產者消費者即行為請求和行為實現,兩者通過佇列的方式進行解耦,以字串的形式傳送指令。但是在設計這些操作的時候,對特殊的事情檢測功能無法解耦,所以很有學習的必要。

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

命令模式的結構圖如下

labview 的 af結構就是將命令改為了乙個物件,不知道是不是參考了這個的設計方法

command定義了命令的介面

labview 中的message類

concretecommand實現command介面,定義了具體的命令

message的do,實現了command的命令

client用於建立具體的命令並設定接收者

invoker要求command執行相應的請求

receiver實施與執行乙個請求,任何乙個類都可能作為receiver

abstract

class

command

}

通過初步編寫,可以發現,程式將乙個單次的命令改為了需要中間傳遞的命令;以前需要控制就是事件結構傳送指令,然後執行具體的一段**,現在封裝後,可以復用執行的**;

我將lightcommand設計包括了light.on 和 light.off, 所以這種情況下,command已經採用繼承的方式進行了設計,當出現命令的增加時,與第一章的鴨子設計相同,繼承會帶來諸多的不一致問題,所以此處採用組合設計更加好。

原書中的設計

重新設計,功能完全一致,但是command採用了單一的繼承(利用了策略模式開發,沒有用到繼承的擴充套件性),所以後續更改也會更容易,實現了控制的解耦;總之一句話,多用組合(策略),少用繼承!

來自為知筆記(wiz)

07 CMD set命令詳解

set命令詳解 作用 顯示 設定或刪除 cmd.exe 環境變數。格式 set variable string variable 指定環境變數名。string 指定要指派給變數的一系列字串。說明 1 set 顯示所有環境變數 2 set var 清楚var的值 3 var 引用變數的值 舉例 d c...

go標準命令詳解0 7 go test

go test命令用於對go語言編寫的程式進行測試。這種測試是以 包為單位的。當然,這還需要測試原始碼檔案的幫助。關於怎樣編寫並寫好go程式測試 我們會在本章的第二節加以詳述。在這裡,我們只討論怎樣使用命令啟動測試。go test命令會自動測試每乙個指定的 包。當然,前提是指定的 包中存在測試原始碼...

07 linux基本命令(四)

上期部落格內容 linux基礎命令 四 sort 它將檔案進行排序,並將排序結果標準輸出。sort命令既可以從特定的檔案,也可以從stdin中獲取輸入。主要 引數 f 忽略大小寫的差異,例如a 與a 視為編碼相同 b 忽略最前面的空格部分 m 以月份的名字來排序,例如jan,dec 等等的排序方法 ...