命令模式:解決包子店順序問(wèn)題
在小編家附近有一家包子店,每天早上都有很多人來(lái)買(mǎi)早點(diǎn)。但是老板經(jīng)常糊涂,總是忘記先后順序,也不記得客人的點(diǎn)單內(nèi)容。為了解決這個(gè)問(wèn)題,我們可以使用設(shè)計(jì)模式中的“命令模式”。 1. 命令模式 命令模式
在小編家附近有一家包子店,每天早上都有很多人來(lái)買(mǎi)早點(diǎn)。但是老板經(jīng)常糊涂,總是忘記先后順序,也不記得客人的點(diǎn)單內(nèi)容。為了解決這個(gè)問(wèn)題,我們可以使用設(shè)計(jì)模式中的“命令模式”。
1. 命令模式
命令模式(Command)將一個(gè)請(qǐng)求封裝成一個(gè)對(duì)象,通過(guò)不同的請(qǐng)求來(lái)參數(shù)化客戶端,并且可以對(duì)請(qǐng)求進(jìn)行排隊(duì)或記錄請(qǐng)求日志,還可以提供撤銷和恢復(fù)功能。
下面是命令模式的UML類圖:
2. 包子店角色分配
在我們的包子店中,我們需要兩個(gè)角色:服務(wù)員兼收錢(qián)的(Waiter)和拿包子打豆?jié){的(Baker)。假設(shè)只有兩種工作:拿包子(Baozi)和打豆?jié){(Doujiang),這兩種工作對(duì)應(yīng)了命令模式中的ConcreteCommand角色。
首先,我們創(chuàng)建Baker類,用于執(zhí)行具體的工作。
3. 抽象命令類
我們創(chuàng)建一個(gè)抽象命令類(Command),其中包含一個(gè)Baker實(shí)例、構(gòu)造函數(shù)和execute方法。
4. 具體命令類
接下來(lái)我們創(chuàng)建具體的命令類,DoujiangCommand和BaoziCommand,它們繼承自Command類。同時(shí),我們重寫(xiě)了toString方法,方便打印日志。
5. 服務(wù)員類
創(chuàng)建Waiter類,用于接收客戶需求并通知Baker送食物。
- Listlt;Commandgt; commands:用于存儲(chǔ)客戶的需求
- setOrder:客戶點(diǎn)單
- cancelOrder:客戶取消之前的點(diǎn)單
- notifyBaker:通知Baker送食物
6. 測(cè)試函數(shù)
最后,我們創(chuàng)建一個(gè)測(cè)試函數(shù)來(lái)運(yùn)行程序并查看結(jié)果。
通過(guò)使用命令模式,我們成功解決了包子店的順序問(wèn)題。現(xiàn)在,每個(gè)客人的需求都被記錄下來(lái),可以按照先后順序進(jìn)行制作,并且客人可以隨時(shí)更改或取消他們的訂單。
設(shè)計(jì)模式在實(shí)際編程中有著廣泛的應(yīng)用,不僅可以提高代碼的可讀性和可維護(hù)性,還可以解決實(shí)際問(wèn)題帶來(lái)的困擾。希望這篇文章對(duì)于理解命令模式有所幫助!