Command Pattern
1. 命令模式 1.1. 模式動機 在軟件設計中,我們經常需要向某些對象發送請求,但是並不知道請求的接收者是誰,也不知道被請求的操作是哪個,我們只需在程序運行時指定具體的請求接收者即可,此時,可以使用命令模式來進行設計,使得請求發送者與請求接收者消除彼此之間的耦合,讓對象之間的調用關係更加靈活。 命令模式可以對發送者和接收者完全解耦,發送者與接收者之間沒有直接引用關係,發送請求的對像只需要知道如何發送請求,而不必知道如何完成請求。 這就是命令模式的模式動機。 1.2. 模式定義 命令模式(Command Pattern):將一個請求封裝為一個對象,從而使我們可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及支持可撤銷的操作。 命令模式是一種對象行為型模式,其別名為動作(Action)模式或事務(Transaction)模式。 1.3. 模式結構 命令模式包含如下角色: Command: 抽象命令類 ConcreteCommand: 具體命令類 Invoker: 調用者 Receiver: 接收者 Client:客戶類 1.4. 時序圖 1.5. 代碼分析 #include <iostream> #include "ConcreteCommand.h" #include "Invoker.h" #include "Receiver.h" using namespace std ; int main ( int argc , char * argv []) { Receiver * pReceiver = new Receiver (); ConcreteCommand * pCommand = new ConcreteCommand ( pReceiver ); Invoker * pInvoker = new Invoker ( pCommand ); pInvoker -> call (); delete pReceiver ; delet...