What is a design pattern
Design pattern is occurring solution to the problem that occurs during software design.
In this article, we are going to discuss the Command design pattern.
Decorator Design pattern
The command pattern is a behavioural design pattern. The pattern encapsulates a request as an object that contains all the information about the request. It even allows operations like undo and redo.
Let’s consider the scenario where you are developing the application and when user exit the app you want to present user to option that do you want to save,close or save and close the application. This problem is the perfect candidate for the command design pattern.

-
Create a class named
Commandand add one abstract methodExecuteas shown belowpublic abstract class Command { public abstract void Execute(); }` -
Create three sub classes of
CommandnamedExitCommand,SaveCommandandSaveAndCloseCommandand inhrits these fromCommandbase class.public class SaveCommand : Command { public override void Execute() { Console.WriteLine("Your work saved!"); } } public class ExitCommand : Command { public override void Execute() { Console.WriteLine("Closing The Application!"); } } public class SaveAndCloseCommand : Command { private SaveCommand _save; private ExitCommand _exit; public SaveAndCloseCommand() { _save=new SaveCommand(); _exit=new ExitCommand(); } public override void Execute() { _save.Execute(); _exit.Execute(); //Console.WriteLine("Save and Close"); } }``` -
Now create a class
Applicationas shown below
public class Application
{
private List<Command> _commands;
private Command _command;
public Application()
{
_commands=new List<UserQuery.Command>();
}
public void SetCommand(Command command){
_commands.Add(command);
_command=command;
}
public void Execute()
{
this._command.Execute();
}
}
- To use the API application in your application.
void Main()
{
var response=Console.ReadLine();
var app = new Application();
switch (response)
{
case "s":
app.SetCommand(new SaveCommand());
break;
case "c":
app.SetCommand(new ExitCommand());
break;
case "sc":
app.SetCommand(new SaveAndCloseCommand());
break;
default:
Console.WriteLine("Invalid command");
break;
}
app.Execute();
}