目錄
1.模式動機
在軟體設計中,我們經常需要向某些物件傳送請求,但是並不知道請求的接收者是誰,也不知道被請求的操作是哪個,我們只需在程式執行時指定具體的請求接收者即可,此時,可以使用命令模式來進行設計,使得請求傳送者與請求接收者消除彼此之間的耦合,讓物件之間的呼叫關係更加靈活。
命令模式可以對傳送者和接收者完全解耦,傳送者與接收者之間沒有直接引用關係,傳送請求的物件只需要知道如何傳送請求,而不必知道如何完成請求。這就是命令模式的模式動機。
2.模式定義
命令模式(command pattern):將乙個請求封裝為乙個物件,從而使我們可用不同的請求對客戶進行引數化;對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。命令模式是一種物件行為型模式,其別名為動作(action)模式或事務(transaction)模式。
3.模式結構
命令模式包含如下角色:
command: 抽象命令類
concretecommand: 具體命令類
invoker: 呼叫者
receiver: 接收者
client:客戶類
4.時序圖
5.**分析
public
class receiver
}
public
abstract
class command
abstract
void execute();
}
public
class
concretecommand
extends
command
@override
public
void
execute()
}
public
class invoker
public
void
executecommand()
}
public
class test
}
執行結果:
6.模式分析
命令模式的本質是對命令進行封裝,將發出命令的責任和執行命令的責任分割開。
7.例項
例項一:電視機遙控器
電視機是請求的接收者,遙控器是請求的傳送者,遙控器上有一些按鈕,不同的按鈕對應電視機的不同操作。抽象命令角色由乙個命令介面來扮演,有三個具體的命令類實現了抽象命令介面,這三個具體命令類分別代表三種操作:開啟電視機、關閉電視機和切換頻道。顯然,電視機遙控器就是乙個典型的命令模式應用例項。
時序圖:
8.優點
命令模式的優點
9.缺點
命令模式的缺點
使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每乙個命令都需要設計乙個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。
10.適用環境
在以下情況下可以使用命令模式:
11.模式應用
很多系統都提供了巨集命令功能,如unix平台下的shell程式設計,可以將多條命令封裝在乙個命令物件中,只需要一條簡單的命令即可執行乙個命令序列,這也是命令模式的應用例項之一。
12.模式擴充套件
巨集命令又稱為組合命令,它是命令模式和組合模式聯用的產物。
巨集命令也是乙個具體命令,不過它包含了對其他命令物件的引用,在呼叫巨集命令的execute()方法時,將遞迴呼叫它所包含的每個成員命令的execute()方法,乙個巨集命令的成員物件可以是簡單命令,還可以繼續是巨集命令。執行乙個巨集命令將執行多個具體命令,從而實現對命令的批處理。
13.總結
設計模式 命令設計模式
一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...
設計模式 命令模式
1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...
設計模式 命令模式
1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...