下面是一個使用C#實現命令模式的示例代碼:
using System;
using System.Collections.Generic;// 命令接口
public interface ICommand
{void Execute();void Undo();
}// 具體命令:打開文件
public class OpenFileCommand : ICommand
{private FileManager fileManager;public OpenFileCommand(FileManager fileManager){this.fileManager = fileManager;}public void Execute(){fileManager.Open();}public void Undo(){fileManager.Close();}
}// 具體命令:保存文件
public class SaveFileCommand : ICommand
{private FileManager fileManager;public SaveFileCommand(FileManager fileManager){this.fileManager = fileManager;}public void Execute(){fileManager.Save();}public void Undo(){fileManager.UndoSave();}
}// 接收者:文件管理器
public class FileManager
{public void Open(){Console.WriteLine("打開文件");}public void Close(){Console.WriteLine("關閉文件");}public void Save(){Console.WriteLine("保存文件");}public void UndoSave(){Console.WriteLine("撤銷保存文件");}
}// 調用者:命令執行器
public class CommandExecutor
{private List<ICommand> commands = new List<ICommand>();public void AddCommand(ICommand command){commands.Add(command);}public void ExecuteCommands(){foreach (var command in commands){command.Execute();}commands.Clear();}public void UndoCommands(){for (int i = commands.Count - 1; i >= 0; i--){commands[i].Undo();}commands.Clear();}
}// 示例代碼
class Program
{static void Main(string[] args){FileManager fileManager = new FileManager();OpenFileCommand openCommand = new OpenFileCommand(fileManager);SaveFileCommand saveCommand = new SaveFileCommand(fileManager);CommandExecutor executor = new CommandExecutor();executor.AddCommand(openCommand);executor.AddCommand(saveCommand);executor.ExecuteCommands();executor.UndoCommands();Console.ReadKey();}
}
在上述示例中,我們首先定義了一個命令接口ICommand,它包含了Execute和Undo方法。然后我們創建了兩個具體的命令類OpenFileCommand和SaveFileCommand,分別表示打開文件和保存文件的命令。
接下來,我們創建了一個接收者FileManager,它是實際執行命令的對象。FileManager中包含了一些具體的操作方法,比如打開文件、關閉文件、保存文件等。
最后,我們創建了一個調用者CommandExecutor,它可以添加和執行命令。調用者將命令添加到命令列表中,并在需要時一起執行或撤銷。
在示例代碼中,我們創建了一個CommandExecutor對象,添加了打開文件和保存文件的命令。然后我們依次執行這些命令,并在最后撤銷執行的命令。運行代碼后,你將看到打開文件、關閉文件、保存文件和撤銷保存文件的輸出。
通過使用命令模式,我們可以將操作封裝成命令對象,并在需要時進行執行或撤銷。這種方式可以實現請求和執行解耦,同時也方便擴展和管理多個命令。