日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

命令模式-重温策略

發布時間:2025/3/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 命令模式-重温策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文為博主原創文章。未經博主同意不得轉載。

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

總結

以上是生活随笔為你收集整理的命令模式-重温策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。