Programming - Command Behavioral Design Pattern
Encapsulate a request as an object, thereby letting you
parameterize clients with different requests, queue or log
requests, and support undoable operations.
andThe classes and/or objects participating in this
example are:
-
Command
- declares an interface for executing an operation
-
ConcreteCommandand
- defines a binding between a Receiver object and an
action
- implements Execute by invoking the corresponding
operation(s) on Receiver
-
Client
- creates a ConcreteCommand object and sets its
receiver
-
Invokerand
- asks the command to carry out the request
-
Receiverand
- knows how to perform the operations associated with
carrying out the request.
|
// Command pattern -- Structural example
|
|
using System;
namespace
DoFactory.GangOfFour.Command.Structural
{
// MainApp test applicatio
class MainApp
{
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.Read();
}
}
// "Command"
abstract class Command
{
protected Receiver
receiver;
// Constructor
public Command(Receiver
receiver)
{
this.receiver =
receiver;
}
public abstract void
Execute();
}
// "ConcreteCommand"
class ConcreteCommand : Command
{
// Constructor
public
ConcreteCommand(Receiver receiver) :
base(receiver)
{
}
public override void
Execute()
{
receiver.Action();
}
}
// "Receiver"
class Receiver
{
public void Action()
{
Console.WriteLine("Called
Receiver.Action()");
}
}
// "Invoker"
class Invoker
{
private Command
command;
public void
SetCommand(Command command)
{
this.command =
command;
}
public void
ExecuteCommand()
{
command.Execute();
}
}
}
Output expected:
Called Receiver.Action()
|