日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

命令模式-重温策略

發(fā)布時間:2025/3/14 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 命令模式-重温策略 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
版權(quán)聲明:本文為博主原創(chuàng)文章。未經(jīng)博主同意不得轉(zhuǎn)載。

https://blog.csdn.net/huo065000/article/details/24587949

? ? ? ? 還記得一個多月前寫的策略模式,自己出門旅行究竟乘坐什么工具呢?這得由自己的想法以及路程來決定吧!只是要想旅行還是得有旅行資金才行,這就得涉及到自己暑假打工當(dāng)服務(wù)員的經(jīng)歷了!服務(wù)員當(dāng)然得服從客戶的命令了!

客人可都不是好惹的啊!

說這么多,要是曾經(jīng)當(dāng)然就是苦與樂的訴說了??墒侨缃襁@兩個經(jīng)歷不正是自己學(xué)習(xí)的兩種設(shè)計模式嗎?

1)緊耦合設(shè)計

? ? ? ? ? ??小時候就夢想自己的老媽能夠開個飯店,這樣就能夠?qū)崿F(xiàn)自己的小小的夢想了-美味佳肴頓頓享受??扇缃癖M管夢想實現(xiàn)了,可是每天看著她忙來忙去,已經(jīng)沒有了吃零食的那種沖動,很多其它的是一種心痛。

? ? 生活易如此。真的不想他每天都那么的忙碌。

為何就不能找個幫手呢?

2)松耦合設(shè)計

? ? ? ? ? 也許這就是老一代的忙碌吧!假設(shè)是自己的話,就不想那么忙碌,如今的夢想就是能夠開一個小小的咖啡店,找一個幫手來幫助自己,來滿足自己調(diào)理制造咖啡的小小愿望。

結(jié)構(gòu)圖:


? ? 可是當(dāng)個店主也并不是是一件easy的事情,假設(shè)顧客突然想換一下咖啡,不想要拿鐵了,又或者點的點心多了,想退一些等等,這些都得須要一些備份,方便結(jié)賬。那么究竟什么是命令模式呢?

3)定義:

? ? 將一個請求封裝為一個對象。從而使你可用不同的請求對客戶進行參數(shù)化;對請求排隊或記錄請求日志,以及支持可撤銷的操作。

命令模式,作為一種行為模式,首先做到了低耦合,提高了靈活性。

4)咖啡館代碼:

client代碼:

static void Main(string[] args){//開門之前準(zhǔn)備Barista self = new Barista();Command Milk1 = new Milk(self); //準(zhǔn)備的牛奶咖啡Command Milk2 = new Milk(self);Command Latte1 = new Latte(self); //準(zhǔn)備的拿鐵咖啡Waiter girl = new Waiter();//開門營業(yè),顧客點餐girl.SetOrder(Milk1);girl.SetOrder(Milk2);girl.SetOrder(Latte1);//點餐完成,通知selfgirl.Notify(); //通知自己。然后進行調(diào)咖啡命令Console.Read();}咖啡師,客戶無需知道自己是誰。僅僅要服務(wù)員能夠把他們所點餐的食品端上去就可

public abstract class Command{protected Barista receiver;public Command (Barista receiver){this .receiver =receiver ;}//運行命令abstract public void ExcuteCommand();}對于服務(wù)員的任務(wù)就有點艱巨了,得時刻關(guān)注著每一位顧客。對于想要的食品有沒有貨源,想不想取消訂單等等都得細(xì)致

public class Waiter{private IList<Command> orders = new List<Command>(); //添加存放詳細(xì)命令的容器//設(shè)置訂單public void SetOrder(Command command){if (command.ToString() == "咖啡館點餐.Coffee+Latte") //在用戶提出請求時,對沒貨的咖啡進行回絕{Console.WriteLine("服務(wù)員:拿鐵咖啡已售完");}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 ();}}最后運行的結(jié)果:

旅游資金掙到手了,究竟該怎樣旅游呢?兩者究竟有什么關(guān)系呢?

5)講述命令模式與策略模式的聯(lián)系:

首先就是封裝的變化:

? 策略模式封裝算法的變化;命令模式封裝請求的變化。

? 都使用組合來實現(xiàn)功能,達到解耦的目的。

就難易而言:

? 當(dāng)然策略模式相比之下比較簡單了,設(shè)計模式第一個介紹的就是大名鼎鼎的策略模式,開啟了自己的春季之旅。

精髓:

? 策略模式用一句話來表達即面向抽象編程。定義一組算法,把他們封裝起來,而且使他們能夠相互替換。該模式使算法能夠獨立于使用它的客戶而變化。而命令模式將一個請求封裝為一個對象。從而使你能夠用不同的請求對客戶進行參數(shù)化。對請求排隊或者記錄請求日志。以及支持可撤銷的操作。

? 命令模式能夠被抽象的視為一種策略模式??墒秋@然命令模式處理的是更為復(fù)雜的情況。




轉(zhuǎn)載于:https://www.cnblogs.com/xfgnongmin/p/10861800.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。