C# 命令模式

來源:互聯網
上載者:User

標籤:public   rri   err   receive   key   ati   來源   count   維護   

C#命令模式  圖片來源<設計模式之禪>

 

按所示 Receiver是實際幹活的實現代碼就在這個模組中 , Command 是抽象父類,ConcreteCommand是繼承Command的類型 抽象的父類中含有Receiver類 用於子類調用其方法,即子類的Execute就是調用的Receiver中實際代碼,Invoker就是為了維護

comand方法 

實際代碼如

 1     /// <summary> 2     /// 實作類別 3     /// </summary> 4     public class Barbecuer 5     { 6  7         public void BakeMutton() 8         { 9 10             Console.WriteLine("烤羊肉串");11         }12 13         public void BakeChickenWing()14         {15 16             Console.WriteLine("烤雞翅");17         }18     }

實作類別即 Receiver 代碼 

//實際代碼 public abstract class Command    {//實現代碼的類        protected Barbecuer receiver;        public Command(Barbecuer receiver)        {            this.receiver = receiver;        }//實現的方法        abstract public void ExcuteCommand();    }    public class BakeChickenWingCommand : Command    {        public BakeChickenWingCommand(Barbecuer receiver)            : base(receiver)        {        }        public override void ExcuteCommand()        {            receiver.BakeChickenWing();        }    }    public class BakeMuttonCommand : Command    {        public BakeMuttonCommand(Barbecuer receiver)            : base(receiver)        {        }        public override void ExcuteCommand()        {            receiver.BakeMutton();        }    }

上面為父類與子類 即Command  ,ConcreteCommand 模組

 

再來就是維護類 用於維護command方法 

 

    public class Waiter    {            Queue<Command> queue = new Queue<Command>();        public void SetCommand(Command command)        {            queue.Enqueue(command);        }              public void Notify()        {            while (queue.Count > 0)            {                Command command = queue.Dequeue();                command.ExcuteCommand();            }        }    }

 

 

後面調用代碼 

 class Program    {        static void Main(string[] args)        {            //產生維護的類            Waiter waiter = new Waiter();            //真正實現代碼的類            Barbecuer barecuer = new Barbecuer();            //傳入到執行類裡面去             Command commandwing = new BakeChickenWingCommand(barecuer);            //傳入執行的子類 讓子類執行代碼             waiter.SetCommand(commandwing);            waiter.SetCommand(commandwing);            waiter.SetCommand(commandwing);            waiter.Notify();            Command command = new BakeMuttonCommand(barecuer);            waiter.SetCommand(command);            waiter.SetCommand(command);            waiter.Notify();            Console.ReadKey();        }    }

命令模式 用出就是維護命令的列隊,有需要的時候就把命令加入日誌,支援撤銷與重做 撤銷就要在waiter 類 即Invoker模組中進行維護判斷是否把command中的某個子類加入到執行列表中

 

C# 命令模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.