定义将请求封装成对象,这样可以参数化各种各样来自客户端的请求,如排队或日志请求,也包括可逆的操作。
使用频度:
中高
UML 类图
参与者该模式参与的类或对象
- 通过调用reveiver的相应操作实现Excute方法
C# 示例代码
// Command pattern -- Structural example
using System;
namespace DoFactory.GangOfFour.Command.Structural
{
///
/// 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();
}
}
}
|
输出
阅读(880) | 评论(0) | 转发(0) |