命令模式

来源:互联网 发布:淘宝明星店铺怎么申请 编辑:程序博客网 时间:2024/06/11 02:11



烧烤店老板Barbecuer类,这个类可以烤各种食物。还定义一个抽象类命令类--Command(图中是订单类),子类是各种具体命令。由于订单类中的订单必须执行,所以订单类中要有一个Barbecuer对象(关联关系)。有一个服务员类,整理顾客命令,该类中有一个list放置Command,故与Command类至少为关联关系。


Command类中要有一个excute()函数,用于命令执行


void excute(receiver)//receiver是命令接受者,也就是烧烤者

{

receiver.makeA();//如果当前是具体命令B类,则调用receiver.makeB();

}


using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 命令模式{    class Barbecuer    {        public void makeA() { Console.WriteLine("烤羊肉"); }                public void makeB() { Console.WriteLine("烤鸡翅"); }    }    abstract class Command    {        protected Barbecuer receiver;        public Command(Barbecuer receiver)        {            this.receiver = receiver;        }        public abstract void excute();            }    class CommandA:Command    {        public CommandA(Barbecuer receiver) : base(receiver) { }        public override void excute()        {            receiver.makeA();        }    }    class CommandB : Command    {        public CommandB(Barbecuer receiver) : base(receiver) { }        public override void excute()        {            receiver.makeB();        }    }    class Waiter    {        private List<Command> lst = new List<Command>();        public void add(Command cmd)        {            lst.Add(cmd);            Console.WriteLine("添加" + cmd.ToString());        }        public void delete(Command cmd)        {            lst.Remove(cmd);            Console.WriteLine("删除" + cmd.ToString());        }        public void Notify()        {            foreach (Command x in lst)            {                x.excute();            }        }    }     class Program    {        static void Main(string[] args)        {            Barbecuer boy = new Barbecuer();            Command cmd1 = new CommandA(boy);            Command cmd2 = new CommandA(boy);            Command cmd3 = new CommandA(boy);            Command cmd4 = new CommandB(boy);            Waiter girl = new Waiter();            //开门营业 顾客点菜            girl.add(cmd1);            girl.add(cmd2);            girl.add(cmd3);            girl.add(cmd4);            girl.delete(cmd3);            //点菜完闭,通知厨房            girl.Notify();            Console.Read();        }    }}



添加命令模式.CommandA添加命令模式.CommandA添加命令模式.CommandA添加命令模式.CommandB删除命令模式.CommandA烤羊肉烤羊肉烤鸡翅