17 C#設(shè)計模式-命令模式.ppt_第1頁
17 C#設(shè)計模式-命令模式.ppt_第2頁
17 C#設(shè)計模式-命令模式.ppt_第3頁
17 C#設(shè)計模式-命令模式.ppt_第4頁
17 C#設(shè)計模式-命令模式.ppt_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Design Patterns,命令模式,劉 偉 (Sunny) weiliu_,大綱,命令模式概述 命令模式的結(jié)構(gòu)與實現(xiàn) 命令模式的應(yīng)用實例 實現(xiàn)命令隊列 記錄請求日志 實現(xiàn)撤銷操作 宏命令 命令模式的優(yōu)缺點與適用環(huán)境,很多軟件都能夠自定義快捷鍵,命令模式概述,開關(guān)與電燈、排氣扇示意圖,命令模式概述,分析 現(xiàn)實生活 相同的開關(guān)可以通過不同的電線來控制不同的電器 開關(guān) 請求發(fā)送者 電燈 請求的最終接收者和處理者 開關(guān)和電燈之間并不存在直接耦合關(guān)系,它們通過電線連接在一起,使用不同的電線可以連接不同的請求接收者,命令模式概述,分析 軟件開發(fā) 按鈕 請求發(fā)送者 事件處理類 請求的最終接收者和處理者

2、 發(fā)送者與接收者之間引入了新的命令對象(類似電線),將發(fā)送者的請求封裝在命令對象中,再通過命令對象來調(diào)用接收者的方法 相同的按鈕可以對應(yīng)不同的事件處理類,命令模式概述,動機(jī) 將請求發(fā)送者和接收者完全解耦 發(fā)送者與接收者之間沒有直接引用關(guān)系 發(fā)送請求的對象只需要知道如何發(fā)送請求,而不必知道如何完成請求,命令模式,命令模式概述,命令模式的定義 對象行為型模式,命令模式概述,命令模式的定義 別名為動作(Action)模式或事務(wù)(Transaction)模式 “用不同的請求對客戶進(jìn)行參數(shù)化” “對請求排隊” “記錄請求日志” “支持可撤銷操作”,命令模式的結(jié)構(gòu)與實現(xiàn),命令模式的結(jié)構(gòu),命令模式的結(jié)構(gòu)與實

3、現(xiàn),命令模式的結(jié)構(gòu) 命令模式包含以下4個角色: Command(抽象命令類) ConcreteCommand(具體命令類) Invoker(調(diào)用者) Receiver(接收者),命令模式的結(jié)構(gòu)與實現(xiàn),命令模式的實現(xiàn) 命令模式的本質(zhì)是對請求進(jìn)行封裝 一個請求對應(yīng)于一個命令,將發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分開 命令模式允許請求的一方和接收的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求如何被接收、操作是否被執(zhí)行、何時被執(zhí)行,以及是怎么被執(zhí)行的,命令模式的結(jié)構(gòu)與實現(xiàn),命令模式的實現(xiàn) 典型的抽象命令類代碼:,命令模式的結(jié)構(gòu)與實現(xiàn),命令模式的實現(xiàn) 典型的調(diào)用者(請求發(fā)送者)類

4、代碼:,命令模式的結(jié)構(gòu)與實現(xiàn),命令模式的實現(xiàn) 典型的具體命令類代碼:,命令模式的結(jié)構(gòu)與實現(xiàn),命令模式的實現(xiàn) 典型的請求接收者類代碼:,命令模式的應(yīng)用實例,實例說明,命令模式的應(yīng)用實例,實例類圖,功能鍵設(shè)置結(jié)構(gòu)圖,命令模式的應(yīng)用實例,實例代碼 (1) FunctionButton:功能鍵類,充當(dāng)請求調(diào)用者(請求發(fā)送者) (2) Command:抽象命令類 (3) ExitCommand:退出命令類,充當(dāng)具體命令類 (4) HelpCommand:幫助命令類,充當(dāng)具體命令類 (5) SystemExitClass:退出系統(tǒng)模擬實現(xiàn)類,充當(dāng)請求接收者 (6) DisplayHelpClass:顯示幫

5、助文檔模擬實現(xiàn)類,充當(dāng)請求接收者 (7) 配置文件App.config (8) Program:客戶端測試類,演示,參考代碼 (DesignPatternCommandSample),命令模式的應(yīng)用實例,結(jié)果及分析 如果需要更換具體命令類,無須修改源代碼,只需修改配置文件,完全符合開閉原則 每一個具體命令類對應(yīng)一個請求的處理者(接收者),通過向請求發(fā)送者注入不同的具體命令對象可以使相同的發(fā)送者對應(yīng)不同的接收者,從而實現(xiàn)“將一個請求封裝為一個對象,用不同的請求對客戶進(jìn)行參數(shù)化”,客戶端只需要將具體命令對象作為參數(shù)注入請求發(fā)送者,無須直接操作請求的接收者,實現(xiàn)命令隊列,動機(jī) 當(dāng)一個請求發(fā)送者發(fā)送一

6、個請求時,有不止一個請求接收者產(chǎn)生響應(yīng),這些請求接收者將逐個執(zhí)行業(yè)務(wù)方法,完成對請求的處理 增加一個CommandQueue類,由該類負(fù)責(zé)存儲多個命令對象,而不同的命令對象可以對應(yīng)不同的請求接收者 批處理,實現(xiàn)命令隊列,實現(xiàn),記錄請求日志,動機(jī) 將請求的歷史記錄保存下來,通常以日志文件(Log File)的形式永久存儲在計算機(jī)中 為系統(tǒng)提供一種恢復(fù)機(jī)制 可以用于實現(xiàn)批處理 防止因為斷電或者系統(tǒng)重啟等原因造成請求丟失,而且可以避免重新發(fā)送全部請求時造成某些命令的重復(fù)執(zhí)行,記錄請求日志,實現(xiàn) 將發(fā)送請求的命令對象通過序列化寫到日志文件中 命令類必須使用屬性Serializable標(biāo)記為可序列化,命

7、令對象,日志文件,序列化,實現(xiàn)撤銷操作,實例 可以通過對命令類進(jìn)行修改使得系統(tǒng)支持撤銷(Undo)操作和恢復(fù)(Redo)操作,實現(xiàn)撤銷操作,結(jié)構(gòu),簡易計算器結(jié)構(gòu)圖,實現(xiàn)撤銷操作,實現(xiàn) 加法類:Adder(請求接收者) 抽象命令類:AbstractCommand 加法命令類:AddCommand(具體命令類) 計算器界面類:CalculatorForm(請求發(fā)送者) 客戶端測試類:Program,演示,參考代碼 (DesignPatternCommandUndoSample),宏命令,動機(jī) 宏命令(Macro Command)又稱為組合命令(Composite Command),它是組合模式和命

8、令模式聯(lián)用的產(chǎn)物 宏命令是一個具體命令類,它擁有一個集合,在該集合中包含了對其他命令對象的引用 當(dāng)調(diào)用宏命令的Execute()方法時,將遞歸調(diào)用它所包含的每個成員命令的Execute()方法。一個宏命令的成員可以是簡單命令,還可以繼續(xù)是宏命令 執(zhí)行一個宏命令將觸發(fā)多個具體命令的執(zhí)行,從而實現(xiàn)對命令的批處理,宏命令,結(jié)構(gòu),命令模式的優(yōu)缺點與適用環(huán)境,模式優(yōu)點 降低了系統(tǒng)的耦合度 新的命令可以很容易地加入到系統(tǒng)中,符合開閉原則 可以比較容易地設(shè)計一個命令隊列或宏命令(組合命令) 為請求的撤銷(Undo)和恢復(fù)(Redo)操作提供了一種設(shè)計和實現(xiàn)方案,命令模式的優(yōu)缺點與適用環(huán)境,模式缺點 使用命令模式可能會導(dǎo)致某些系統(tǒng)有過多的具體命令類(針對每一個對請求接收者的調(diào)用操作都需要設(shè)計一個具體命令類),命令模式的優(yōu)缺點與適用環(huán)境,模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論