今天我們來講一下命令模式。
一、案例
我們去燒烤店吃燒烤,給我們烤羊肉串和雞翅。用簡單的控制台應用程式來模擬一下。
1///2
///烤肉串者
3///
4public
class
barbecurer510
11public
void
bakechickenwing()
1215 }
客戶端呼叫:
1public
static
void
main()
2
二、演繹
1、第一步演繹
如果燒烤店裡有好多人,都要了若干的烤串和雞翅,那麼,烤肉串者怎麼記得誰點了什麼,點了多少串呢?這樣就會亂掉了。如何解決這個問題呢?我們需要服務員,需要選單,這樣就可以分清了。好,我們來修改一下我們的**。
1///2
///烤肉串者
3///
4public
class
barbecurer510
11public
void
bakechickenwing()
1215}16
//抽象命令類
17public
abstract
class
command
1825
26abstract
public
void
excutecommand();27}
28//
烤雞翅命令
29class
bakechickenwingcommand : command
3034
public
override
void
excutecommand()
3538}39
//服務員
40public
class
waiter
4148
49public
void
notify()
5053 }
客戶端呼叫:
1public
static
void
main()
2
2、第二步演繹
在這裡,我們還有幾個問題
①真實情況並不是客戶點乙個菜服務員就去通知廚房做乙個菜,而是客戶點完之後,服務員再報給廚房製作。
②如果某樣菜沒了,客戶是不知道的,應該由服務員或者廚師來判斷這個菜是否還有。
③客戶點了很多東西,是需要記錄下來的,以便後面結賬使用。
④如果客戶點完菜了,覺得點多了,需要取消幾樣菜。
好,針對上述問題,我們再來修改一下**:
我們需要修改一下服務員類
1//服務員
2public
class
waiter313
else
1418}19
//取消訂單
20public
void
cancelorder(command command)
2125
//通知全部執行
26public
void
notity()
2733
}34 }
客戶端呼叫:
1public
static
void
main()
2
這樣,我們的問題都解決了,以上呢,其實就是用到了命令模式。
好,下面我們來總結一下命令模式:
命令模式:講乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
來看一下命令模式的基本**:
1///2
///宣告執行操作的介面
3///
4abstract
class
command512
13abstract
public
void
execute();14}
15///
16///
具體的命令操作
17///
18class
concretecommand:command
1924
25public
override
void
execute()
2629}30
//命令的接受者
31class
receiver
3237}38
//要求該命令執行這個請求
39class
invoker
4047
48public
void
executecommand()
4952 }
客戶端呼叫:
1public
static
void
main()
2
以上就是命令模式的基本**。
linux命令(22) mkdir命令
例項1 建立乙個空目錄 mkdir test 例項2 遞迴建立多個目錄 mkdir p home test 例項3 建立許可權為777的目錄 mkdir m 777 test 例項4 建立新目錄都顯示資訊 mkdir v test 例項5 乙個命令建立專案的目錄結構 mkdir vp test lo...
22種設計模式 裝飾者模式
裝飾模式是一種結構型設計模式,允許你通過將物件放入包含行為的特殊封裝物件中來為原物件繫結新的行為。注意,裝飾模式和橋接模式很相似,沒學過橋接模式的小夥伴,可以看這篇部落格 22種設計模式 橋接模式。裝飾者模式和橋接模式的出發點都是一樣的,都是為了解決類 的問題,先講下這個問題 舉個例子,比如星巴克賣...
Golang設計模式 22裝飾者模式
其他設計模式 是指在不改變原有物件的基礎之上,將功能附加到物件上.提供了比繼承更靈活的替代方法,屬於結構型模式 動態的給乙個物件增加一些額外的職責,就增加功能來說,裝飾模式相比生產子類更為靈活 使用裝飾模式進行系統設計時將產生很多小物件,這些物件的區別在於它們之間相互連線的方式有所不同,而不是它們的...