命令模式-重温策略
https://blog.csdn.net/huo065000/article/details/24587949
? ? ? ? 還記得一個多月前寫的策略模式,自己出門旅行究竟乘坐什么工具呢?這得由自己的想法以及路程來決定吧!只是要想旅行還是得有旅行資金才行,這就得涉及到自己暑假打工當服務員的經歷了!服務員當然得服從客戶的命令了!
客人可都不是好惹的啊!
說這么多,要是曾經當然就是苦與樂的訴說了。可是如今這兩個經歷不正是自己學習的兩種設計模式嗎?
1)緊耦合設計
? ? ? ? ? ??小時候就夢想自己的老媽能夠開個飯店,這樣就能夠實現自己的小小的夢想了-美味佳肴頓頓享受。可如今盡管夢想實現了,可是每天看著她忙來忙去,已經沒有了吃零食的那種沖動,很多其它的是一種心痛。
? ? 生活易如此。真的不想他每天都那么的忙碌。
為何就不能找個幫手呢?
2)松耦合設計
? ? ? ? ? 也許這就是老一代的忙碌吧!假設是自己的話,就不想那么忙碌,如今的夢想就是能夠開一個小小的咖啡店,找一個幫手來幫助自己,來滿足自己調理制造咖啡的小小愿望。
結構圖:
? ? 可是當個店主也并不是是一件easy的事情,假設顧客突然想換一下咖啡,不想要拿鐵了,又或者點的點心多了,想退一些等等,這些都得須要一些備份,方便結賬。那么究竟什么是命令模式呢?
3)定義:
? ? 將一個請求封裝為一個對象。從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤銷的操作。
命令模式,作為一種行為模式,首先做到了低耦合,提高了靈活性。
4)咖啡館代碼:
client代碼:
static void Main(string[] args){//開門之前準備Barista self = new Barista();Command Milk1 = new Milk(self); //準備的牛奶咖啡Command Milk2 = new Milk(self);Command Latte1 = new Latte(self); //準備的拿鐵咖啡Waiter girl = new Waiter();//開門營業,顧客點餐girl.SetOrder(Milk1);girl.SetOrder(Milk2);girl.SetOrder(Latte1);//點餐完成,通知selfgirl.Notify(); //通知自己。然后進行調咖啡命令Console.Read();}咖啡師,客戶無需知道自己是誰。僅僅要服務員能夠把他們所點餐的食品端上去就可 public abstract class Command{protected Barista receiver;public Command (Barista receiver){this .receiver =receiver ;}//運行命令abstract public void ExcuteCommand();}對于服務員的任務就有點艱巨了,得時刻關注著每一位顧客。對于想要的食品有沒有貨源,想不想取消訂單等等都得細致 public class Waiter{private IList<Command> orders = new List<Command>(); //添加存放詳細命令的容器//設置訂單public void SetOrder(Command command){if (command.ToString() == "咖啡館點餐.Coffee+Latte") //在用戶提出請求時,對沒貨的咖啡進行回絕{Console.WriteLine("服務員:拿鐵咖啡已售完");}else //記錄客戶所點的咖啡的日志,以備算賬收線{orders.Add(command);Console.WriteLine("添加訂單:" + command.ToString() + " 時間:" + DateTime.Now.ToString());}}//取消訂單public void CancelOrder(Command command){orders .Remove (command );Console .WriteLine ("取消訂單:" + command.ToString() + " 時間:" + DateTime.Now.ToString());}//通知所有運行public void Notify(){foreach (Command cmd in orders ){cmd .ExcuteCommand ();}}最后運行的結果:旅游資金掙到手了,究竟該怎樣旅游呢?兩者究竟有什么關系呢?
5)講述命令模式與策略模式的聯系:
首先就是封裝的變化:
? 策略模式封裝算法的變化;命令模式封裝請求的變化。
? 都使用組合來實現功能,達到解耦的目的。
就難易而言:
? 當然策略模式相比之下比較簡單了,設計模式第一個介紹的就是大名鼎鼎的策略模式,開啟了自己的春季之旅。
精髓:
? 策略模式用一句話來表達即面向抽象編程。定義一組算法,把他們封裝起來,而且使他們能夠相互替換。該模式使算法能夠獨立于使用它的客戶而變化。而命令模式將一個請求封裝為一個對象。從而使你能夠用不同的請求對客戶進行參數化。對請求排隊或者記錄請求日志。以及支持可撤銷的操作。
? 命令模式能夠被抽象的視為一種策略模式。可是顯然命令模式處理的是更為復雜的情況。
轉載于:https://www.cnblogs.com/xfgnongmin/p/10861800.html
總結
- 上一篇: 获取程序所有加载的dll名称
- 下一篇: mysql总结1