命令模式

命令模式是行為型模式的一種捻艳,同時屬于行為模式的還有:狀態(tài)模式,觀察者模式庆猫,策略模式和之前寫的中介者模式认轨。


什么是命令模式?什么時候需要使用命令模式月培?

命令模式是通過命令發(fā)送者和命令執(zhí)行者的解耦來完成對命令的具體控制的嘁字。 命令模式是對功能方法的抽象恩急,并不是對對象的抽象。命令模式是將功能提升到對象來操作纪蜒,以便對多個功能進(jìn)行一系列的處理以及封裝衷恭。任何模式的出現(xiàn),都是為了解決一些特定的場景的耦合問題纯续,以達(dá)到對修改封閉随珠,對擴(kuò)展開放的效果。命令模式是為了解決命令的請求者和命令的實現(xiàn)者之間的耦合關(guān)系猬错,或者說當(dāng)你需求中有明確的添加撤銷工作時牙丽,可以考慮命令模式。

命令模式的優(yōu)點(diǎn)

類間解耦:調(diào)用者角色與接收者角色之間沒有任何依賴關(guān)系兔魂,調(diào)用者實現(xiàn)功能時只需調(diào)用Command 抽象類的execute方法就可以烤芦,不需要了解到底是哪個接收者執(zhí)行∥鲂#可擴(kuò)展性:Command的子類可以非常容易地擴(kuò)展构罗,而調(diào)用者Invoker和高層次的模塊Client不產(chǎn)生嚴(yán) 重的代碼耦合。命令模式結(jié)合其他模式會更優(yōu)秀:命令模式可以結(jié)合責(zé)任鏈模式智玻,實現(xiàn)命令族解析任務(wù)遂唧;結(jié)合模板方法模式,則可以減少 Command子類的膨脹問題吊奢。

命令模式和策略模式

他們兩者在類圖上非常相似

● 關(guān)注點(diǎn)不同:策略模式關(guān)注的是算法替換的問題盖彭,一個新的算法投產(chǎn),舊算法退休页滚,或者提供多種算法由調(diào)用者自己選擇使用召边,算法的自由更替是它實現(xiàn)的要點(diǎn)。換句話說裹驰,策略模式關(guān)注的是算法的完整性隧熙、封裝性,只有具備了這兩個條件才能保證其可以自由切換幻林。命令模式則關(guān)注的是解耦問題贞盯,如何讓請求者和執(zhí)行者解耦是它需要首先解決的,解耦的要求就是把請求的內(nèi)容封裝為一個一個的命令沪饺,由接收者執(zhí)行躏敢。由于封裝成了命令,就同時可以對命令進(jìn)行多種處理整葡,例如撤銷件余、記錄等。

● 角色功能不同:在我們的例子中,策略模式中的抽象算法和具體算法與命令模式的接收者非常相似蛾扇,但是它們的職責(zé)不同攘烛。策略模式中的具體算法是負(fù)責(zé)一個完整算法邏輯魏滚,它是不可再拆分的原子業(yè)務(wù)單元镀首,一旦變更就是對算法整體的變更。而命令模式則不同鼠次,它關(guān)注命令的實現(xiàn)更哄,也就是功能的實現(xiàn)。例如我們在分支中也提到接收者的變更問題腥寇,它只影響到命令族的變更成翩,對請求者沒有任何影響,從這方面來說赦役,接收者對命令負(fù)責(zé)麻敌,而與請求者無關(guān)。命令模式中的接收者只要符合六大設(shè)計原則掂摔,完全不用關(guān)心它是否完成了一個具體邏輯术羔,它的影響范圍也僅僅是抽象命令和具體命令,對它的修改不會擴(kuò)散到模式外的模塊乙漓。當(dāng)然级历,如果在命令模式中需要指定接收者,則需要考慮接收者的變化和封裝叭披,例如一個老顧客每次吃飯都點(diǎn)同一個廚師的飯菜寥殖,那就必須考慮接收者的抽象化問題。

● 使用場景不同:策略模式適用于算法要求變換的場景涩蜘,而命令模式適用于解耦兩個有緊耦合關(guān)系的對象場合或者多命令多撤銷的場景嚼贡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市同诫,隨后出現(xiàn)的幾起案子编曼,更是在濱河造成了極大的恐慌,老刑警劉巖剩辟,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掐场,死亡現(xiàn)場離奇詭異,居然都是意外死亡贩猎,警方通過查閱死者的電腦和手機(jī)熊户,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吭服,“玉大人嚷堡,你說我怎么就攤上這事。” “怎么了蝌戒?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵串塑,是天一觀的道長。 經(jīng)常有香客問我北苟,道長桩匪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任友鼻,我火速辦了婚禮傻昙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彩扔。我一直安慰自己妆档,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布虫碉。 她就那樣靜靜地躺著贾惦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敦捧。 梳的紋絲不亂的頭發(fā)上须板,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音绞惦,去河邊找鬼逼纸。 笑死,一個胖子當(dāng)著我的面吹牛济蝉,可吹牛的內(nèi)容都是我干的杰刽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼王滤,長吁一口氣:“原來是場噩夢啊……” “哼贺嫂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雁乡,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤第喳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踱稍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曲饱,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年珠月,在試婚紗的時候發(fā)現(xiàn)自己被綠了扩淀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡啤挎,死狀恐怖驻谆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤胜臊,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布勺卢,位于F島的核電站,受9級特大地震影響象对,放射性物質(zhì)發(fā)生泄漏黑忱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一织盼、第九天 我趴在偏房一處隱蔽的房頂上張望杨何。 院中可真熱鬧酱塔,春花似錦沥邻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕊玷,卻和暖如春邮利,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垃帅。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工延届, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贸诚。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓方庭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酱固。 傳聞我的和親對象是個殘疾皇子械念,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345