1、概述:
命令模式,顾名思义就是管理一系列命令的设计模式,比如说,路边烤羊手串的,每个买羊肉串的都是命令请求者,而烤羊肉串的师傅就是命令的执行者,每个买羊肉串的对羊肉串的要求不尽相同,有的想要辣的,有的想要不辣的,有的需要10串,有的需要5串等等,没有客户的要求不尽相同,如果中间确实一个记录命令的角色,那么烤羊肉串的师傅,是很容易记错的,这时候如果有一个服务员专门记录每个客户的需求,然后传达给烤羊肉串的师傅,这样这个师傅也不会搞错哪个客户要几串,哪个客户给过钱了没有,这样师傅也可以专心烤羊肉串,这也符合单一职责的原则。
2、定义:

3、角色:
- 命令最终接收者:烤羊肉串的师傅。
- 命令记录者:服务员。
- 客户:每个买羊肉串的人。
4、示例代码:
以烤羊肉串为例:
命令抽象基类:
abstract class Command
{
protected Barbecuer receiver;//烤羊肉串的师傅,命令最终接收者
public Command(Barbecuer receiver)
{
this.receviver=receiver;
}
public abstract void ExecuteCommand();//执行命令
}
具体的命令类:
class CommandA:Command//烤羊肉串命令
{
public CommandA(Barbecuer receiver):base(receiver)
{
}
public override void ExecuteCommand()
{
receiver.MakeMutton();//
}
}
class CommandB:Command//烤鸡翅的命令
{
public CommandB(Barbecuer receiver):base(receiver)
{}
public override void ExecuteCommand()
{
receiver.MakeChickenWing();
}
}
命令执行者:
class Barbecuer
{
public void MakeMutton()
{
console.Write("烤羊肉串。。。");
}
public void MakeChickenWing()
{
console.Write("烤鸡翅。。。");
}
}
命令记录者:
class Warter
{
private List<Command> commandList;
public void SetCommand(Command command)//记录命令
{
this.commandList.Add(command);
}
public void Notify()//下单执行
{
foreach(Command command in commandList)
{
command.ExecuteCommand();
}
}
}
客户端请求:
Barbecuer boy=new Barbecuer();//实例化一个烤羊肉串的师傅
Command commandMutton=new CommandA(boy);//实例化一个烤羊肉串的命令
Command commandChickenWing=new CommandB(boy);//实例化一个烤鸡翅的命令
Waiter waiter=new Waiter();
waiter.SetCommand(commandMutton);
waiter.SetCommand(commandChickenWing);
waiter.Notify();
其实,命令模式在日常生活中很常见,比如,在一家公司里,一个项目开发组,每个开发人员就相当于烤羊肉串的师傅,是命令的最终接收者,而项目经理就是服务员的角色,记录客户的需求,然后分发给开发人员处理具体客户的需求,然后把开发人员的开发成果反馈给客户,服务员也是这样,把烤羊肉串的师傅烤出来的成果交给买烤肉的客户,这个例子应该很形象吧,唯一不同的是,在一家烤肉店里,烤肉师傅的薪资待遇总比服务员的高,而项目经理的薪资待遇比开发人员高多了,真是行业不同,差距大啊.......
浙公网安备 33010602011771号