将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,常用于实现撤销和重做功能,如编辑器中的撤销和重做按钮。
// 抽象命令类
public interface ICommand
{
// 执行命令
void Execute();
}
// 具体命令类
public class ConcreteCommand : ICommand
{
// 维护一个接收者对象的引用
private Receiver receiver;
// 构造方法,传入接收者对象
public ConcreteCommand(Receiver receiver)
{
this.receiver = receiver;
}
// 执行命令,调用接收者的方法
public void Execute()
{
receiver.Action();
}
}
// 接收者类
public class Receiver
{
// 定义一个具体的操作
public void Action()
{
Console.WriteLine("Called Receiver.Action()");
}
}
// 调用者类
public class Invoker
{
// 维护一个命令对象的引用
private ICommand command;
// 设置命令对象
public void SetCommand(ICommand command)
{
this.command = command;
}
// 执行命令
public void ExecuteCommand()
{
command.Execute();
}
}
// 测试代码
class Program
{
static void Main(string[] args)
{
// 创建一个接收者对象
var receiver = new Receiver();
// 创建一个命令对象,传入接收者对象
var command = new ConcreteCommand(receiver);
// 创建一个调用者对象,设置命令对象
var invoker = new Invoker();
invoker.SetCommand(command);
// 调用者执行命令
invoker.ExecuteCommand();
Console.ReadKey();
/*
* 输出结果:
* Called Receiver.Action()
*/
}
}