文章出處
文章列表
在今天,讀書有時是件“麻煩”事。它需要你付出時間,付出精力,還要付出一份心境。--僅以《大話設計模式》來祭奠那逝去的……
命令模式:將一個請求封裝成一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤銷操作
1.燒烤店就餐
燒烤男孩和服務員女孩,開門營業,客戶點餐,女孩記單,客人點完菜,女孩通知男孩開做
定義燒烤師傅類
/// <summary> /// 烤肉串師傅類 /// </summary> public class Barbecuer { public void BakeMutton() { Console.WriteLine("烤羊肉串"); } public void BakeChickenWing() { Console.WriteLine("烤雞翅"); } }
定義抽象命令類和具體命令類
/// <summary> /// 抽象命令 /// </summary> public abstract class Command { protected Barbecuer receiver; public Command(Barbecuer receiver) { this.receiver = receiver; } public abstract void ExcuteCommand(); } /// <summary> /// 烤肉命令 /// </summary> public class BakeMuttonCommand : Command { public BakeMuttonCommand(Barbecuer receiver) : base(receiver) { } public override void ExcuteCommand() { receiver.BakeMutton(); } } /// <summary> /// 烤肉命令 /// </summary> public class BakeChickenWingCommand : Command { public BakeChickenWingCommand(Barbecuer receiver) : base(receiver) { } public override void ExcuteCommand() { receiver.BakeChickenWing(); } }
定義服務員類
/// <summary> /// 服務員 /// </summary> public class Waiter { private IList<Command> orders = new List<Command>(); /// <summary> /// 設置訂單 /// </summary> public void SetOrder(Command command) { orders.Add(command); Console.WriteLine("增加訂單:{0};時間:{1}", command.ToString(), DateTime.Now); } /// <summary> /// 取消訂單 /// </summary> public void CancleOrder(Command command) { orders.Remove(command); Console.WriteLine("取消訂單:{0};時間:{1}", command.ToString(), DateTime.Now); } /// <summary> /// 全部通知 /// </summary> public void Notify() { foreach (var v in orders) { v.ExcuteCommand(); } } }
開啟場景模擬
static void Main(string[] args) { //燒烤男孩和服務員女孩 Barbecuer boy = new Barbecuer(); Waiter girl = new Waiter(); //開門營業,客戶點餐,女孩記單 girl.SetOrder(new BakeMuttonCommand(boy)); girl.SetOrder(new BakeChickenWingCommand(boy)); //客人點完菜,女孩通知男孩開做 girl.Notify(); }
文章列表
全站熱搜