設計模式之---命令模式
阿新 • • 發佈:2021-10-06
命令模式(Command),將一個請求封裝為一個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
優點:
- 能夠比較容易的設計一個命令佇列
- 在需要的情況下,可以較容易的將命令計入日誌
- 允許接收請求的一方決定是否要否決請求
- 可以容易的實現對請求的撤銷和重做
- 新增新的具體命令很容易
- 命令模式把請求一個操作的物件與知道怎麼執行一個操作的物件分割開。
敏捷開發原則:不要為程式碼新增基於猜測的,實際不需要的功能。如果不清楚一個系統是否需要命令模式,一般就不要急著去實現它,事實上,在需要的時候通過重構實現這個模式並不困難,只有在真正需要知道撤銷/恢復操作等功能時,把原來的程式碼重構為命令模式才有意義。
Invoker:要求該命令執行這個請求
command:用來宣告執行操作的介面
Receiver:知道如何實施與執行一個請求相關的操作。任何類都可能作為一個接收者。
concreteCommand:將一個接收者物件綁定於一個動作,呼叫接收者相應的操作,一實現Excute
Receiver r = new Receiver(); Command c = new ConcreteCommand(r); Invoker i = new Invoker(); i.SetCommand(c); i.ExcuteCommand();View Code
abstract class Command { protected Receiver receiver; public Command(Receiver receiver) { this.receiver = receiver; } abstract public void Excute(); } class ConcreteCommand : Command { public ConcreteCommand(Receiver receiver):baseView Code(receiver) { } public override void Excute() { receiver.Action(); } } class Invoker { private Command command; public void SetCommand(Command command) { this.command = command; } public void ExcuteCommand() { command.Excute(); } } class Receiver { public void Action() { Console.WriteLine("執行請求"); } }