命令模式

命令模式定義

將一個(gè)請求封裝為一個(gè)對象,從而可用不同的請求對客戶端進(jìn)行參數(shù)化,對請求排隊(duì)或者記錄請求日志,以及支持可撤銷的操作,命令模式是一種對象行為型模式,其別名為動(dòng)作模式或事務(wù)模式。

命令模式結(jié)構(gòu)圖


image.png

命令隊(duì)列的實(shí)現(xiàn)

有時(shí)候需要將多個(gè)請求排隊(duì),當(dāng)一個(gè)請求發(fā)送者發(fā)送一個(gè)請求時(shí),不值一個(gè)請求接受者產(chǎn)生響應(yīng),這些請求接受者將逐個(gè)執(zhí)行業(yè)務(wù)方法,完成對請求的處理。

撤銷操作的實(shí)現(xiàn)

通過調(diào)用名利對象的execute()方法來實(shí)現(xiàn)對請求的處理。如果需要撤銷請求,可通過命令類中增加一個(gè)逆向操作來實(shí)現(xiàn)。

請求日志:

請求日志就是將請求的歷史記錄保存下來,通常以日志文件的形式永久保存在計(jì)算機(jī)中。請求日志通常有三種。
1.一點(diǎn)發(fā)生斷電,需要回復(fù)到特定的狀態(tài)。
2.請求日志可以實(shí)現(xiàn)批量處理,在一個(gè)請求日志文件中可以存儲(chǔ)一系列命令對想,
3.可以將命令隊(duì)列中的所有命令對象都存儲(chǔ)在一個(gè)日志中。每執(zhí)行一個(gè)命令則從日志文件中刪除一個(gè)對應(yīng)的命令對象,防止因?yàn)閿嚯娀蛘呦到y(tǒng)重啟等原因造成請求丟失,而且可以避免沖I型你發(fā)送全部命令請求時(shí)造成默寫命令的重復(fù)執(zhí)行,只需執(zhí)行請求日志的文件,再繼續(xù)執(zhí)行文件中剩余的命令。

宏命令

又稱為組合命令,他是組合模式和命令模式的聯(lián)用的產(chǎn)物,宏命令是一個(gè)具體命令類,他有用一個(gè)集合屬性,在該集合中包含了對其他命令對象的引用。通常宏命令不直接與請求接受者交互,而是通過他的成員來調(diào)用接受者的方法。當(dāng)調(diào)用宏命令的exeute()方法時(shí)候,講遞歸調(diào)用他的所包含的每個(gè)成員命令的excute()方法。一個(gè)宏命令的成員可以是簡單命令,還可以繼續(xù)是宏命令。

命令模式主要優(yōu)缺點(diǎn)

優(yōu)點(diǎn)
1.降低系統(tǒng)的耦合度,由于請求者和接受者之間不存在直接引用,因此請求者與接受者之間完全解耦,相同的請求這可以對應(yīng)不同的接受者,同樣可以反之,
2.新的命令可以很容易的加入到系統(tǒng)中。由于增加的具體命令不會(huì)印象到其他類,因此增加新的具體命令類很容易,無須修改原有系統(tǒng)源代碼,甚至客戶端代碼,滿足開閉原則。
3.可以比較容易的設(shè)計(jì)一個(gè)命令隊(duì)列和宏命令
4.可以請求的撤銷和恢復(fù)操作提供的一個(gè)設(shè)計(jì)和實(shí)現(xiàn)方案。
缺點(diǎn)
命令模式的主要缺點(diǎn)是,使用命令模式可能會(huì)導(dǎo)致系統(tǒng)過多的具體命令類,因?yàn)獒槍γ恳粋€(gè)請求接受者的調(diào)用操作都需要設(shè)計(jì)一個(gè)具體命令類,因此在某些系統(tǒng)中可能需要提供大量的具體命令類,這將影響命令模式的使用。

命令模式適用場景

1.系統(tǒng)需要將請求調(diào)用者和請求接受者解耦,是的調(diào)用者和接受者不直接交互,請求調(diào)用者武學(xué)知道接受者的存在,也無須知道調(diào)用者是誰,接受者也無須關(guān)心合適被調(diào)用。
2.系統(tǒng)需要在不同的時(shí)間指定請求,將請求排隊(duì)和執(zhí)行請求。一個(gè)命令對象和請求的初始化調(diào)用者可以有不同的生命期,換而言之,最初的請求發(fā)出者可能已經(jīng)不在了,而命令對象本身依然是活動(dòng)的。
3.系統(tǒng)需要支持命令的撤銷操作和恢復(fù)操作
4.系統(tǒng)需要將一組操作組合在一起形成宏命令。

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

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

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