DotNetAge - Mvc & jQuery CMS
Hide sidebar

Command


Definition


Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

UML class diagram


command

Participants


The classes and/or objects participating in this pattern are:

  • Command - declares an interface for executing an operation
  • ConcreteCommand
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
  • Invoker - asks the command to carry out the request
  • Receiver - knows how to perform the operations associated with carrying out the request.


Sample code in C#



/// <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();
}
}

 


    Average:
  • Reads
    (1316)
  • Permalink
Share to: Add to del.icio.us Digg! Share on Google Buzz Share on Facebook Reddit! Stumble it! Share on Twitter

Tag cloud

Anything in here will be replaced on browsers that support the canvas element