設計模式之命令模式

2022-03-21 08:31:06 字數 2553 閱讀 8926

名詞解釋:

命令模式:將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作.

必要元素:

1.用於執行操作的介面(抽象類);

2.乙個或者多個實現(繼承)自操作介面的類;

3.用於執行命令的類;

4.接收者,用於實施與請求相關的操作。

上例子:

命令介面:

abstract

class

command

public

abstract

void

execute();

}

介面實現類:

class

concretecommand : command

public

override

void

execute()

}

執行請求類(接收者,也就是命令執行的操作就是該類的行為):

class

receiver

}

執行命令類:

class

invoker

public

void

executecommand()

}

呼叫:

receiver r = new

receiver();

command c = new

concretecommand(r);

invoker i = new

invoker();

i.setcommand(c);

i.executecommand();

console.read();

例子二(由於上述例子只是**的構成部分,通過乙個廚師做羊肉串和炸雞翅,以及服務員向顧客詢問點餐,這樣乙個場景):

抽象命令:

abstract

class

command

public

abstract

void

executecommand();

}

具體命令:

///

///烤雞翅命令

/// class

bakechickenwingcommand:command

public

override

void

executecommand()

}///

///羊肉串命令

/// class

bakemuttoncommand:command

public

override

void

executecommand()

}

廚師類(也就是執行請求類):

class

barbecuer

public

void

bakechickenwing()

}

服務員類(執行命令):

class

waiter

public

void

cancelorder(command command)

public

void

notify()

}}

呼叫:

barbecuer boy = new

barbecuer();

command bakemuttoncommand1 = new

bakemuttoncommand(boy);

command bakemuttoncommand2 = new

bakemuttoncommand(boy);

command bakechickenwingcommand1 = new

bakechickenwingcommand(boy);

waiter girl = new

waiter();

girl.setcommand(bakemuttoncommand1);

girl.setcommand(bakemuttoncommand2);

girl.setcommand(bakechickenwingcommand1);

girl.notify();

console.read();

整個過程和我們的必要元素是一一對應的,在command中依賴receiver(也就是真正執行命令的),在invoke(waiter也就是服務員,可以進行命令的增加和移除,實現命令佇列)中也是放入command進行命令的執行。最終的呼叫過程也是一層層的進行設定,不管是receiver的設定還是command的增加移除。

總結:

命令模式的優點:較容易實現乙個命令佇列;容易將命令記入日誌;容易實現對請求的撤銷和重做;增加新命令也較容易。

設計模式之命令設計模式

先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...

設計模式之命令模式

command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...

設計模式之命令模式

當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖 如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。命令設計模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行...