定義:將請求封裝成乙個物件,從而讓使用者使用不同的請求吧客戶端引數化。請求排隊或者記錄請求日誌,以及支援可撤銷的操作。
1. 系統需要將請求呼叫者和請求接收者解耦,使得呼叫者和接收者不直接互動。
2. 系統需要在不同的時間指定請求、將請求排隊和執行請求。
3. 系統需要支援命令的撤銷(undo)操作和恢復(redo)操作。
4. 系統需要將一組操作組合在一起。
command命令角色 :定義命令的介面,宣告具體命令類需要執行的方法。這是乙個抽象角色。
concretecommand具體命令角色:命令介面的具體實現物件,通常會持有接收者,並呼叫接收者的功能來完成命令要執行的操作。
invoker請求者角色:負責呼叫命令物件執行請求,通常會持有命令物件(可以持有多個命令物件)。invoker是client真正觸發命令並要求命令執行相應操作的地方(使用命令物件的入口)。
客戶端(client):命令由客戶端來建立,並設定命令的接收者。
/**
* 軍隊
* 具體執行攻打任務
*@author administrator
* */
public
class
army
public
void
attack()
public
void
back()
public
void
undo()
}/**
* 士兵
*@author administrator
* */
public
class
soldier
public
void
setattach(string attach)
public string getback()
public
void
setback(string back)
}/**
* 命令 聖旨
*@author administrator
* */
public
inte***ce
command
public
class
attachcommand
implements
command
@override
public
void
excute()
@override
public
void
back()
}public
class
undocommand
implements
command
@override
public
void
excute()
@override
public
void
back()
}/**
* 將軍
*@author administrator
* */
public
class
general
/*** 皇帝呼叫大臣攻擊方法
*/public
void
attach()
public
void
undo()
}public
class
emperor
}
優點
解除了請求者與實現者之間的耦合,降低了系統的耦合度。
對請求排隊或記錄請求日誌,支援撤銷操作。
可以容易地設計乙個組合命令。
新命令可以容易地加入到系統中。
缺點因為針對每乙個命令都需要設計乙個具體命令類,使用命令模式可能會導致系統有過多的具體命令類。
適用場景
當需要對行為進行「記錄、撤銷/重做」等處理時。
系統需要將請求者和接收者解耦,使得呼叫者和接收者不直接互動。
系統需要在不同時間指定請求、請求排隊和執行請求。
系統需要將一組操作組合在一起,即支援巨集命令。
軟體架構設計 六
六 介面協議 這裡說的介面一般指程序間或系統間的介面,至於介面效能,則是在設計心模組時就考慮的問題。我比較想表達以下幾個觀點 1 介面盡量通用,如 2個程序可能部署在同一臺機器上也可能是不同機器上,這時介面就需要考慮通用性 2 介面不能對自身系統和對方系統造成影響,如阻塞 3 介面要考慮容錯性,如加...
設計模式與架構設計
論設計模式在架構設計中的運用 設計模式 在我們現實的軟體專案開發中,常常會遇到一次又一次的關於軟體設計上的問題,而設計模式就針對那些問題提供了一系列的解決方案。設計模式是一種較高層次程式結構的設計策略 是一種技巧,它著重於為軟體系統 子系統內部的各物件間提供乙個良好的通訊平台,協調各者之間的關係,使...
系統設計之架構設計
架構設計這個詞聽的非常的多,但真正何謂架構設計呢?可能要你真的來講還真的講不太清楚,很多人都知道架構設計是對系統進行分層 分模組進行設計,但又有多少人知道這步應該怎麼去做呢,往往很多的programmer在剛進入架構設計這個領域的時候,受到以前做模組的那種影響,把自己的眼光限定到了具體的模組實現上去...