專業(yè)做加盟推廣的公司百度網(wǎng)站的優(yōu)化方案
定義
? ? ? ?將一個請求封裝為一個對象,從而讓你可以用不同的請求對客戶進(jìn)行參數(shù)化,對請求排隊(duì)或者記錄請求日志,以及支持可撤銷的操作。
角色
? ? ? 抽象命令類(Command):聲明用于執(zhí)行請求的execute方法,通過它可以調(diào)用請求接收者的相關(guān)操作。
? ? ? 具體命令類(ConcreteCommand):具體實(shí)現(xiàn)了執(zhí)行請求的execute方法,同時定義了接收者對象,并在執(zhí)行方法時調(diào)用接收者的相關(guān)操作。
? ? ? 調(diào)用者(Invoker):即請求的發(fā)送者,它通過命令對象來執(zhí)行請求。它不需要在設(shè)計(jì)時確定具體接收者,在程序運(yùn)行時注入對應(yīng)的命令對象,從而實(shí)現(xiàn)間接地調(diào)用請求接收者的相關(guān)操作。
? ? ? 接收者(Receiver):具體實(shí)現(xiàn)對請求的業(yè)務(wù)處理。
優(yōu)點(diǎn)
? ? ? 降低了系統(tǒng)的耦合度
? ? ? 新的命令可以很容易地加入到系統(tǒng)中,符合開閉原則
? ? ? 可以比較容易地設(shè)計(jì)一個命令隊(duì)列或宏命令(組合命令)
? ? ? 為請求的撤銷(Undo)和恢復(fù)(Redo)操作提供了一種設(shè)計(jì)和實(shí)現(xiàn)方案
缺點(diǎn)
? ? ? 使用命令模式可能會導(dǎo)致某些系統(tǒng)有過多的具體命令類(針對每一個對請求接收者的調(diào)用操作都需要設(shè)計(jì)一個具體命令類)
適用場景
? ? ? 系統(tǒng)需要將請求調(diào)用者和請求接收者解耦,使得調(diào)用者和接收者不直接交互
? ? ? 系統(tǒng)需要在不同的時間指定請求、將請求排隊(duì)和執(zhí)行請求
? ? ? 系統(tǒng)需要支持命令的撤銷(Undo)操作和恢復(fù)(Redo)操作
? ? ? 系統(tǒng)需要將一組操作組合在一起形成宏命令
案例
? ? ? 為了用戶使用方便,某系統(tǒng)提供了一系列功能鍵,用戶可以自定義功能鍵的功能,例如功能鍵FunctionButton可以用于退出系統(tǒng)(由SystemExitClass類來實(shí)現(xiàn)),也可以用于顯示幫助文檔(由DisplayHelpClass類來實(shí)現(xiàn))。用戶可以通過修改配置文件來改變功能鍵的用途,現(xiàn)使用命令模式來設(shè)計(jì)該系統(tǒng),使得功能鍵類與功能類之間解耦,可為同一個功能鍵設(shè)置不同的功能。