命令模式:
讲一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队,记录处理,并支持统一操作。
using System;
using System.Collections.Generic;
using System.Text;
namespace 设计模式
{
//命令类,规定命令内容Order,命令对象Receiver
class Command
{
private readonly Receiver receiver;
private readonly string order;
public string GetOrder()
{
return order;
}
public Command(Receiver receiver,string order)
{
this.receiver = receiver;
this.order = order;
}
public void Execute()
{
receiver.Action(this.order);
}
}
//执行者类,执行收到的命令
class Receiver
{
private string name;
public Receiver(string name)
{
this.name = name;
}
public void Action(string order)
{
Console.WriteLine(name + "执行请求" + order);
}
}
//调解类,管理客户端的命令,进行预处理,并统一调用命令执行函数。
class Invoker
{
private string name;
public Invoker(string name)
{
this.name = name;
}
private IList<Command> commands = new List<Command>();
public void SetOrder(Command command)
{
//设置命令,可以对各种命令预处理,比如不规范的在这里拒绝,就不用调用execute了
//也可以不只有增加,删除命令等均可。
commands.Add(command);
Console.WriteLine(name + "增加命令" + command.GetOrder());
}
public void RunOrder()
{
//遍历每个命令,执行
foreach (Command command in commands)
{
command.Execute();
}
}
}
class costume
{
//客户端程序
static void Main(string[] args)
{
Receiver receiver1 = new Receiver("执行者1");
Receiver receiver2 = new Receiver("执行者2");
Invoker invokerA = new Invoker("调节者A");
Invoker invokerB = new Invoker("调节者B");
Command command1 = new Command(receiver1, "干事情i");
Command command2 = new Command(receiver2, "干事情j");
invokerA.SetOrder(command1);
invokerA.SetOrder(command2);
invokerA.RunOrder();
}
}
}
结果:
调节者A增加命令干事情i
调节者A增加命令干事情j
执行者1执行请求干事情i
执行者2执行请求干事情j