Encapsulate a request as an object, thereby letting you
parameterize clients with different requests, queue or log requests, and
support undoable operations
Participants
The classes and/or objects
participating in this pattern are:
- Command(Command)
Declares an interface for executing an operation
- Concrete Command(Calculator Command)
Implements Execute by invoking the corresponding
operation(s) on Receiver
- Client(Command App)
Creates a Concrete Command object and sets its receiver
- Invoker(User)
Asks the command to carry out the request
- Receiver(Calculator)
Knows how to perform the operations associated with
carrying out the request.
Example of Comand Design Pattern
Example of Comand Design Pattern
using System;
namespace Command.Structural
{
/// <summary>
/// MainApp
startup class for Structural
/// Command
Design Pattern.
/// </summary>
class MainApp
{
/// <summary>
/// Entry
point into console application.
/// </summary>
static void Main()
{
//
Create receiver, command, and invoker
Receiver receiver
= new Receiver();
Command command
= new ConcreteCommand(receiver);
Invoker invoker
= new Invoker();
//
Set and execute command
invoker.SetCommand(command);
invoker.ExecuteCommand();
//
Wait for user
Console.ReadKey();
}
}
/// <summary>
/// The
'Command' abstract class
/// </summary>
abstract class Command
{
protected Receiver receiver;
//
Constructor
public Command(Receiver receiver)
{
this.receiver
= receiver;
}
public abstract void Execute();
}
/// <summary>
/// The
'ConcreteCommand' class
/// </summary>
class ConcreteCommand : Command
{
//
Constructor
public ConcreteCommand(Receiver receiver)
:
base(receiver)
{
}
public override void Execute()
{
receiver.Action();
}
}
/// <summary>
/// The
'Receiver' class
/// </summary>
class Receiver
{
public void Action()
{
Console.WriteLine("Called
Receiver.Action()");
}
}
/// <summary>
/// The
'Invoker' class
/// </summary>
class Invoker
{
private Command _command;
public void SetCommand(Command command)
{
this._command
= command;
}
public void ExecuteCommand()
{
_command.Execute();
}
}
}
|
Output
Called
Receiver.Action()
|
No comments:
Post a Comment