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