Need separate command classes for each functionality to be executed
Reversible operations and undo functionality
Queue operations and execute them at a later time
Button with multiple funtionality like cut, copy, paste, undo, redo
Eliminate need of if else or switch case statements to execute different commands
Code
Assume we are creating console app to generate reports with different types
publicinterfaceICommand{publicstringName{get;}voidExecute();voidUndo();}publicclassExtractEtabsDataCommand:ICommand{publicstringName=>"Extract Etabs Data";publicvoidExecute(){Console.WriteLine("Extracting Etabs data...");// Implementation for extracting Etabs data}publicvoidUndo(){Console.WriteLine("Undoing Etabs data extraction...");// Implementation for undoing Etabs data extraction}}publicclassExportExcelCommand:ICommand{publicstringName=>"Export Excel";publicvoidExecute(){Console.WriteLine("Exporting to Excel...");// Implementation for exporting to Excel}publicvoidUndo(){Console.WriteLine("Undoing Excel export...");// Implementation for undoing Excel export}}publicclassGenerateReportCommand:ICommand{publicstringName=>"Generate Report";publicvoidExecute(){Console.WriteLine("Generating report...");// Implementation for generating report}publicvoidUndo(){Console.WriteLine("Undoing report generation...");// Implementation for undoing report generation}}
//Client codeprivatestaticvoidMain(){//Command Patternvarcommands=newList<ICommand>();commands.Add(newExtractEtabsDataCommand());commands.Add(newExportExcelCommand());commands.Add(newGenerateReportCommand());//Print list of commands for user to selectConsole.WriteLine("Available Commands:");for(inti=0;i<commands.Count;i++){Console.WriteLine($"{i + 1}. {commands[i].Name}");}//Prompt user to select a commandintchoice=int.Parse(Console.ReadLine());if(choice>0&&choice<=commands.Count){varselectedCommand=commands[choice-1];Console.WriteLine($"Executing command: {selectedCommand.Name}");selectedCommand.Execute();}else{Console.WriteLine("Invalid choice.");}}