設計模式 命令模式

2021-09-30 14:00:26 字數 2378 閱讀 8353

目錄

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...