• Español (España, alfabetización internacional)
    • English (United States)
    • العربية (مصر)
    • Deutsch (Deutschland)
    • français (France)
    • हिंदी (भारत)
    • italiano (Italia)
    • 日本語 (日本)
    • 한국어 (대한민국)
    • Nederlands (Nederland)
    • polski (Polska)
    • русский (Россия)
    • ไทย (ไทย)
    • Türkçe (Türkiye)
    • Tiếng Việt (Việt Nam)
    • 中文(中华人民共和国)
    • 中文(香港特別行政區)
  • Inicio de sesión
  • Registro
DotNetAge - Mvc & jQuery CMS
Ocultar 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





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#




///
/// MainApp startup class for Structural
/// Command Design Pattern.
///
class MainApp
{
///
/// Entry point into console application.
///
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();
}
}

///
/// The 'Command' abstract class
///
abstract class Command
{
protected Receiver receiver;

// Constructor
public Command(Receiver receiver)
{
this.receiver = receiver;
}

public abstract void Execute();
}

///
/// The 'ConcreteCommand' class
///
class ConcreteCommand : Command
{
// Constructor
public ConcreteCommand(Receiver receiver) :
base(receiver)
{
}

public override void Execute()
{
receiver.Action();
}
}

///
/// The 'Receiver' class
///
class Receiver
{
public void Action()
{
Console.WriteLine("Called Receiver.Action()");
}
}

///
/// The 'Invoker' class
///
class Invoker
{
private Command _command;

public void SetCommand(Command command)
{
this._command = command;
}

public void ExecuteCommand()
{
_command.Execute();
}
}

 


    Average:
  • Lee
    (805)
  • Enlace permanente
Compartir:

Tag cloud

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