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();

 

 其实,命令模式在日常生活中很常见,比如,在一家公司里,一个项目开发组,每个开发人员就相当于烤羊肉串的师傅,是命令的最终接收者,而项目经理就是服务员的角色,记录客户的需求,然后分发给开发人员处理具体客户的需求,然后把开发人员的开发成果反馈给客户,服务员也是这样,把烤羊肉串的师傅烤出来的成果交给买烤肉的客户,这个例子应该很形象吧,唯一不同的是,在一家烤肉店里,烤肉师傅的薪资待遇总比服务员的高,而项目经理的薪资待遇比开发人员高多了,真是行业不同,差距大啊.......

posted on 2013-08-21 21:09  Kelly_HanShuai  阅读(153)  评论(0)    收藏  举报