大話設計模式-命令模式
阿新 • • 發佈:2018-12-05
命令模式
命令模式將一個請求封裝為一個物件,從而使你可用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
對於請求排隊或記錄請求日誌,以及支援可撤銷的操作,行為請求者和行為實現者的緊耦合是不合適的。
命令模式的優點
命令模式能較容易地設計一個命令模式。在需要的情況下,可以較容易地將命令記入日誌。
允許接受請求的一方決定是否要否決請求。可以很容易地實現對請求的撤銷和重做。
由於加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易。
命令模式把請求一個操作的物件與知道怎麼執行一個操作的物件分割開來。
命令模式結構演示
命令抽象
宣告執行操作的介面。
abstract class Command { protected Receiver receiver; public Command(Receiver receiver) => this.receiver = receiver; abstract public void Execute(); }
具體命令
將一個接收者綁定於一個動作,呼叫接收者相應的操作,以實現執行方法。
class ConcreteCommand : Command { public ConcreteCommand(Receiver receiver) : base(receiver) { } public override void Execute() => receiver.Action(); }
呼叫者
要求該命令執行這個請求。
class Invoker { private Command command; public void SetCommand(Command command) => this.command = command; public void ExcuteCommand() => command.Execute(); }
接收/執行者
知道如何實施與執行一個與請求相關的操作,任何類都可能作為一個接收者。
class Receiver { public void Action() => Console.WriteLine("執行請求"); }
測試結果
Receiver r = new Receiver(); Command c = new ConcreteCommand(r); Invoker i = new Invoker(); i.SetCommand(c); i.ExcuteCommand(); //測試結果 執行請求