命令模式是一种数据驱动的设计模式,在命令模式中,请求在对象中作为命令来封装,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把命令直接传给相应的对象,该对象执行命令。使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象 进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。
ICommand接口
这是命令接口,定义了一个执行操作的方法Execute()
public interface ICommand
{
void Execute();
}
具体命令角色ConcreteCommand
实现了ICommand接口。它有一个Receiver对象的引用,并在Execute()方法中调用接收者的Action()方法。
public class ConcreteCommand : ICommand
{
private readonly Receiver _receiver;
public ConcreteCommand(Receiver receiver)
{
_receiver = receiver;
}
public void Execute()
{
_receiver.Action();
}
}
实现者/接收者(Receiver)角色
它知道如何执行一个请求相关的操作,这里的操作是输出"执行请求!"。
public class Receiver
{
public void Action()
{
Console.WriteLine("执行请求!");
}
}
调用者/请求者(Invoker)角色
它持有一个命令对象,并在某个时间点调用命令对象的Execute()方法。
public class Invoker
{
private ICommand _command;
public void SetCommand(ICommand command)
{
_command = command;
}
public void ExecuteCommand()
{
_command.Execute();
}
}
测试类
调用调用者的ExecuteCommand()
方法,从而触发接收者的操作
class MyClass
{
public static void Main(string[] args)
{
ICommand command = new ConcreteCommand(new Receiver());
Invoker invoker = new Invoker();
invoker.SetCommand(command);
invoker.ExecuteCommand();
}
}