命令模式(Command Pattern):将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销操作。
命令模式的结构
Command(抽象命令类):提供具体类执行方法和撤销方法的一个模板。
abstract class Command
{
public abstract void Execute();
}
ConcreteCommand(具体抽象类):它对应具体接受对象,将接收者对象的动作绑定,提供调用者调用该动作。
class ConcreteCommand : Command
{
private Receiver receiver = new Receiver();
public override void Execute()
{
receiver.Action();
}
}
Invoker(调用者):既请求的发送者,与接收者分离通过命令类操作接收者降低它们之间的耦合度。因此它只与抽象命令之间存在关联关系,在程序运行中将一个具体命令注入其中,再调用其动作即可操作接收者
class Invoker
{
private Command command;
/// <summary>
/// 构造注入
/// </summary>
/// <param name="command"></param>
public Invoker(Command command)
{
this.command = command;
}
/// <summary>
/// 调用命令
/// </summary>
public void Call()
{
command.Execute();
}
}
Receiver(接收者):接受者执行与请求相关的操作,具体实现对请求的业务处理。
class Receiver
{
public void Action()
{
Console.WriteLine("执行操作");
}
}
调用
Command cmd = new ConcreteCommand();
Invoker invoker = new Invoker(cmd);
invoker.Call();