行為型模式之 命令模式

2022-08-17 14:48:15 字數 1601 閱讀 7693

命令模式(command pattern):將乙個請求封裝為乙個物件,從而使我們可用不同的請求對客戶進行引數化;對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。命令模式是一種物件行為型模式,其別名為動作(action)模式或事務(transaction)模式。

主要解決:在軟體系統中,行為請求者與行為實現者通常是一種緊耦合的關係,但某些場合,比如需要對行為進行記錄、撤銷或重做、事務等處理時,這種無法抵禦變化的緊耦合的設計就不太合適。

何時使用:在某些場合,比如要對行為進行"記錄、撤銷/重做、事務"等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將"行為請求者"與"行為實現者"解耦?將一組行為抽象為物件,可以實現二者之間的松耦合。

如何解決:通過呼叫者呼叫接受者執行命令,順序:呼叫者→接受者→命令。

關鍵**:定義三個角色:1、received 真正的命令執行物件 2、command 3、invoker 使用命令物件的入口

優點:1、降低了系統耦合度。 2、新的命令可以很容易新增到系統中去。

缺點:使用命令模式可能會導致某些系統有過多的具體命令類。

在軟體設計中,我們經常需要向某些物件傳送請求,但是並不知道請求的接收者是誰,也不知道被請求的操作是哪個,我們只需在程式執行時指定具體的請求接收者即可,此時,可以使用命令模式來進行設計,使得請求傳送者與請求接收者消除彼此之間的耦合,讓物件之間的呼叫關係更加靈活。

命令模式可以對傳送者和接收者完全解耦,傳送者與接收者之間沒有直接引用關係,傳送請求的物件只需要知道如何傳送請求,而不必知道如何完成請求。這就是命令模式的模式動機。

我們首先建立作為命令的介面 order,然後建立作為請求的 stock 類。實體命令類 buystock 和 sellstock,實現了 order 介面,將執行實際的命令處理。建立作為呼叫物件的類 broker,它接受訂單並能下訂單。

broker 物件使用命令模式,基於命令的型別確定哪個物件執行哪個命令。commandpatterndemo,我們的演示類使用 broker類來演示命令模式。

//

步驟一 建立乙個命令介面

class

order

};//

步驟二 建立乙個請求類

class

stock

void

sell()

};//

步驟 3 建立實現了 order 介面的實體類

class buystock : public

order

buystock() {}

void

execute()

};class sellstock :public

order

sellstock() {}

void

execute()

};//

步驟 4 建立命令呼叫類

class

broker

void

placeorders()

}};int

main()

行為型模式之命令模式

命令模式 定義 將乙個請求封裝為乙個物件,從而可用不同的請求對客戶進行引數化 對請求排隊或者記錄請求日誌,一家支援可撤銷的操作。命令模式是一種物件行為型模式,其別名為工作模式或事務模式。命令模式的核心在於引入了命令類,通過命令類來降低傳送者與接收者的耦合度,請求傳送者只需指定乙個命令物件,再通過命令...

行為型模式 命令模式

liebrother原文 行為型模式 命令模式 十一大行為型模式之三 命令模式。姓名 命令模式 英文名 command pattern 價值觀 軍令如山 個人介紹 encapsulate a request as an object,thereby letting you parameterize ...

行為型模式 命令模式

liebrother原文 行為型模式 命令模式 十一大行為型模式之三 命令模式。姓名 命令模式 英文名 command pattern 價值觀 軍令如山 個人介紹 encapsulate a request as an object,thereby letting you parameterize ...