架構設計六之命令模式

2021-07-31 17:59:20 字數 2097 閱讀 5897

定義:將請求封裝成乙個物件,從而讓使用者使用不同的請求吧客戶端引數化。請求排隊或者記錄請求日誌,以及支援可撤銷的操作。

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在剛進入架構設計這個領域的時候,受到以前做模組的那種影響,把自己的眼光限定到了具體的模組實現上去...