設(shè)計(jì)模式之命令模式



本文為簡(jiǎn)述程序設(shè)計(jì)的設(shè)計(jì)模式之一,非普及文章,專業(yè)的朋友略看即可。

命令模式

命令模式是指,使用者向接收者發(fā)送命令,使用者并不清楚命令如何執(zhí)行,也不管是怎樣的過程。

在實(shí)際生活中,音樂播放器就可以看成一個(gè)命令模式的設(shè)計(jì)。我們并不知道如何播放一首歌曲,只需要點(diǎn)擊按鈕命令即可。至于播放的是MP3還是OGG,如何解碼音頻,數(shù)據(jù)如何送達(dá)DSP,如何將聲音轉(zhuǎn)成模擬信號(hào)從揚(yáng)聲器輸出等待,我們都不需要知道。

播放器

命令模式實(shí)現(xiàn)

1.定義全局變量標(biāo)志,比如【Play】、【Pause】、【Next】等。

2.請(qǐng)求方只發(fā)送命令:【Play】、【Pause】、【Next】。

3.接收方解析命令,并調(diào)用對(duì)應(yīng)的流程實(shí)現(xiàn)具體功能。

除了選擇不同的命令之外,還可以選擇不同的接收者。比如我們需要播放音頻和視頻,分別要使用音頻播放器和視頻播放器,但是對(duì)于上層的命令是一樣的。既然我可以不管MP3還是WMA,我也可以不管這是MP3還是MP4,甚至是PPT。對(duì)于用戶講,我可以直接根據(jù)文件后綴來(lái)判斷我應(yīng)該啟動(dòng)和中關(guān)聯(lián)程序。

對(duì)!電腦上雙擊文件就打開的功能就是這樣做的。如果后綴名錯(cuò)了,一般無(wú)法自動(dòng)打開,需要手動(dòng)選擇打開方式。

選擇不同的命令解析者和接收者

命令模式的使用場(chǎng)景

只要你認(rèn)為是命令的地方就可以采用命令模式,例如,在GUI開發(fā)中,一個(gè)按鈕的點(diǎn)擊是一個(gè)命令,可以采用命令模式;模擬DOS命令的時(shí)候,當(dāng)然也要采用命令模式;觸發(fā)-反饋機(jī)制的處理等。

擴(kuò)展與撤銷

我們可以在已有流程上擴(kuò)展命令。比如播放音樂,開啟空調(diào),開啟電燈,進(jìn)入回家模式。或者相反進(jìn)入出門模式,把所有的電器關(guān)閉。

此時(shí),可以創(chuàng)建新的接收者,讓新的解析器逐步處理。

撤銷類似,記錄之前的狀態(tài)并還原。

當(dāng)然,實(shí)際編程中,我們一般會(huì)省略設(shè)置和執(zhí)行的分布,不需要先設(shè)置后執(zhí)行,而是設(shè)置了就馬上自動(dòng)執(zhí)行。

參考資料

對(duì),我最初看得是這本書。

實(shí)際上這一章看了很久,原因是書中的舉例太復(fù)雜,描述又不清楚。很多描述用英文原文翻譯出來(lái)讓人一頭霧水。舉例來(lái)說(shuō),在《UML 建模、設(shè)計(jì)與分析》一書中:

4.3.1 依賴關(guān)系

模型元素之間的依賴關(guān)系描述的是它們之間語(yǔ)義上的關(guān)系。當(dāng)兩個(gè)元素處于依賴關(guān)系中時(shí),其中一個(gè)元素的改變可能會(huì)影響或提供消息給另一個(gè)元素,即一個(gè)元素以某種形式依賴于另一元素。?

看明白了嗎?沒有。實(shí)際上,我來(lái)寫的話,會(huì)這樣描述:

依賴關(guān)系是指,A了解B的使用方法和內(nèi)容,在特定情況下需要用到B的方法和內(nèi)容。比如司機(jī)和汽車,醫(yī)生和聽診器,藍(lán)翔同學(xué)和挖掘機(jī)。

總的來(lái)說(shuō),命令模式在Head First 設(shè)計(jì)模式中描述的并不好,所以我參考了以下書籍。

當(dāng)然,還有百科全書:菜鳥教程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 假設(shè)有一個(gè)快餐店,而我是該餐廳的點(diǎn)餐服務(wù)員,那么我一天的工作應(yīng)該是這樣的:當(dāng)某位客人點(diǎn)餐或者打來(lái)訂餐電話后,我會(huì)把...
    yufawu閱讀 748評(píng)論 1 4
  • 博客原文地址 折騰Java設(shè)計(jì)模式之命令模式 命令模式 wiki上的描述 Encapsulate a reques...
    大萌小路閱讀 344評(píng)論 0 0
  • 命令模式 現(xiàn)在多數(shù)應(yīng)用都有撤銷操作。雖然難以想象,但在很多年里,任何軟件中確實(shí)都不存在撤銷操作。撤銷操作是在197...
    英武閱讀 1,501評(píng)論 0 50
  • 獲得服務(wù)器內(nèi)存狀態(tài)服務(wù)器請(qǐng)求次數(shù)接口請(qǐng)求次數(shù)數(shù)據(jù)庫(kù)阻塞情況
    ElonYanJ閱讀 105評(píng)論 0 0
  • 考研,我想絕不是一時(shí)的沖動(dòng)。但凡決定去考的人,無(wú)不是思前想后,考慮了很久。 于我,這個(gè)不考研的大三狗來(lái)說(shuō),此刻想寫...
    白衡閱讀 689評(píng)論 2 3

友情鏈接更多精彩內(nèi)容