命令模式(command) 將乙個請求封裝成乙個物件,從而使你可以用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可取消的操作。
示例需求: 模擬顧客點餐(下命令command),服務員記錄訂單(invoker,要求廚師執行command),並告知廚師訂單的類目(receiver,具體的命令的執行者,任何類都可作為接收者)。
command,宣告執行操作的介面:
/**
* 命令物件
*/public inte***ce command
烤羊肉串的命令:bakemuttoncommand
public class bakemuttoncommand implements command
}
烤雞翅的命令:bakechickenwingcommand
public class bakechickenwingcommand implements command
}
廚師cook(receiver):
/**
* receiver, cook,廚師
*/public class cook
public void bakechickenwing()
}
服務員waiter:
/**
* invoker,要求命令執行。這是也就是服務員告訴廚師做什麼
*/public class waiter
public waiter()
//下訂單
public void setcommand(command command) else if (command instanceof bakemuttoncommand)
commands.add(command);
}//取消訂單
public void cancelcommand(command command)
//執行訂單
public void notifycommands()
}}
測試:
@test
public void commandtest()
測試結果:
顧客下單烤羊肉串...
顧客下單烤雞翅...
廚師烤羊肉串
廚師烤雞翅
廚師烤雞翅
命令模式的作用:
原始碼位址
設計模式之命令設計模式
先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...
設計模式之命令模式
command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...
設計模式之命令模式
當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖 如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。命令設計模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行...