命令模式 java實現

2021-08-11 14:06:16 字數 3433 閱讀 3495

//烤肉串者

public

classbarbecuerpublic

classbakechickenwingcommandextendscommand {

publicbakechickenwingcommand(barbecuer

receiver) {

super(receiver);

@override

public

voidexcutecommand() {

receiver.bakechickenwing();

public

classdemo2 {

public

static

voidmain(string args) {

//門面店事先就找好了烤肉廚師,服務員和烤肉選單,就等顧客上門

barbecuer

boy=newbarbecuer();

command

bakemuttoncommand1 =newbakemuttoncommand(boy);

command

bakemuttoncommand2 =newbakemuttoncommand(boy);

bakechickenwingcommand

bakechickenwingcommand1 =newbakechickenwingcommand(boy);

waiter

girl=newwaiter();

//服務員根據客戶的要求,通知廚房開始製作

girl.setorder(bakemuttoncommand1);

girl.inform();

girl.setorder(bakemuttoncommand2);

girl.inform();

girl.setorder(bakechickenwingcommand1);

girl.inform();

問題描述:

①真實的情況其實並不是使用者點乙個菜,服務員就通知廚房做乙個

,應該是點完所有燒烤後

,服務員一次通知製作

②如果此時雞翅沒了,不應該由客戶判斷有沒有

,應該是由服務員或烤肉串者來否決這個請求

③客戶到底點了哪些燒烤和飲料,這是需要記錄日誌的

,以備收費

,也包括後期的統計

④客戶完全有可能因為烤的肉串太多而考慮取消一些還沒有製作的肉串

public

classwaiter2 {

privatelist

orders=newarraylist

();//設定訂單

public

voidsetorder(command

command) {

orders.add(command);

system.outdate().tolocalestring());

//取消訂單

public

voidcancel(command

command) {

orders.remove(command);

system.outdate().tolocalestring());

//通知全部執行

public

voidinform() {

for(command

command : orders) {

command.excutecommand();

public

classdemo3 {

public

static

voidmain(string args) {

barbecuer

boy=newbarbecuer();

command

bakemuttoncommand1 =newbakemuttoncommand(boy);

command

bakemuttoncommand2 =newbakemuttoncommand(boy);

command

bakechickenwingcommand1 =newbakechickenwingcommand(boy);

waiter2

girl=newwaiter2();

//開門營業,顧客點菜

girl.setorder(bakemuttoncommand1);

girl.setorder(bakemuttoncommand2);

girl.setorder(bakechickenwingcommand1);

//點菜完畢,通知廚房

girl.inform();

輸出結果:

烤羊肉串

烤羊肉串

烤雞翅命令模式:

將乙個請求封裝成乙個物件,從而使你可用不同的請求對客戶進行引數化

;對請求排隊或記錄請求日誌

,以及支援可撤銷的操作.

命令模式的優點:

①它能較容易地設定乙個命令佇列

②在需要的情況下,它能較容易地將命令記入日誌

③允許接收請求的一方決定是否要否決請求

④可以容易地實現對請求的撤銷和重做

⑤由於加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易

⑥把請求乙個操作的物件與知道怎麼執行乙個操作的物件分隔開

注意:命令模式支援對請求的撤銷和重做,但是你還不清楚是否需要這個功能的時候

,你要不要實現命令模式呢?

其實應該是不要實現.敏捷開發原則告訴我們

,不要為**新增基於猜測的

,實際不需要的功能

.如果不清楚乙個系統是否需要命令模式

,一般不要急著去實現它

,事實上

,在需要的時候通過重構實現這個模式並不困難

,只有真正需要如撤銷

/恢復操作功能的時候

,把原來的**重構為命令模式才有意義

.

Java設計模式 命令模式

命令模式定義 命令模式通過被稱為command的類封裝了對目標物件的呼叫行為以及呼叫引數。將乙個請求封裝稱為乙個命令,從而使你不同的請求對客戶進行引數化 隊請求排隊或記錄請求日誌,以及支援可撤銷的操作。優點 解耦了呼叫者與接受者之間的聯絡。呼叫者呼叫乙個操作,接受者接受請求執行相應的動作,因為使用命...

java設計模式 命令模式

1.概念 將來自客戶端的請求傳入乙個物件,從而使你可用不同的請求對客戶進行引數化。用於 行為請求者 與 行為實現者 解耦,可實現二者之間的松耦合,以便適應變化。分離變化與不變的因素。在物件導向的程式設計中,乙個物件呼叫另乙個物件,一般情況下的呼叫過程是 建立目標物件例項 設定呼叫引數 呼叫目標物件的...

JAVA設計模式 命令模式

命令模式,又稱為行動 action 模式 交易 transaction 模式,是一種行為型設計模式。命令模式的思想是 把乙個請求或者操作封裝到乙個物件中,允許系統使用不同的請求把客戶端引數化,從而實現對請求排隊或者記錄請求日誌 提供命令的撤銷和恢復功等能。命令模式涉及5個角色 結構圖 具體 實現 接...