C# 設計模式-命令(Command)
阿新 • • 發佈:2019-02-02
將一個請求封裝為一個物件,達到用不同請求對客戶進行引數化。呼叫者通過某個命令來呼叫接收者執行相關操作,減弱呼叫者與接收者的耦合度。
主要組成:
Command-命令父類或介面
ConcreteCommand-具體命令
Invoker-呼叫者
Receiver-接收者,執行命令指定的相關操作
相關類:
using System; namespace Command { /// <summary> /// 命令父類(或介面) /// </summary> abstract class CommandClass { public abstract void Execute(); } /// <summary> /// 開啟檔案(具體命令) /// </summary> class OpenFileCommand : CommandClass { FileReceiver fileReceiver; public OpenFileCommand(FileReceiver fileReceiver) { this.fileReceiver = fileReceiver; } public override void Execute() { fileReceiver.OpenFile(); } } /// <summary> /// 複製檔案(具體命令) /// </summary> class CopyFileCommand : CommandClass { FileReceiver fileReceiver; public CopyFileCommand(FileReceiver fileReceiver) { this.fileReceiver = fileReceiver; } public override void Execute() { fileReceiver.CopyFile(); } } /// <summary> /// 檔案(接收者,執行相關操作) /// </summary> class FileReceiver { public void OpenFile() { Console.WriteLine("開啟檔案"); } public void CopyFile() { Console.WriteLine("複製檔案"); } } /// <summary> /// 呼叫者(可忽略呼叫者,直接呼叫Execute()命令) /// </summary> class Invoker { //呼叫命令 public void Invoke(CommandClass command) { command.Execute(); } } }
呼叫:
using System; namespace Command { class Program { static void Main(string[] args) { //呼叫者 Invoker invoker = new Invoker(); //接收者 FileReceiver fileReceiver = new FileReceiver(); //具體命令 OpenFileCommand openFileCommand = new OpenFileCommand(fileReceiver); //呼叫命令 invoker.Invoke(openFileCommand); CopyFileCommand copyFileCommand = new CopyFileCommand(fileReceiver); invoker.Invoke(copyFileCommand); Console.Read(); } } }
結果:
參考資料:《設計模式-可複用面對物件軟體的基礎》