c設(shè)計(jì)模式命令模式_第1頁
c設(shè)計(jì)模式命令模式_第2頁
c設(shè)計(jì)模式命令模式_第3頁
c設(shè)計(jì)模式命令模式_第4頁
c設(shè)計(jì)模式命令模式_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

DesignPatterns命令模式劉偉(Sunny)大綱命令模式概述命令模式的結(jié)構(gòu)與實(shí)現(xiàn)命令模式的應(yīng)用實(shí)例實(shí)現(xiàn)命令隊(duì)列記錄請求日志實(shí)現(xiàn)撤銷操作宏命令命令模式的優(yōu)缺點(diǎn)與適用環(huán)境很多軟件都能夠自定義快捷鍵命令模式概述開關(guān)與電燈、排氣扇示意圖命令模式概述分析現(xiàn)實(shí)生活相同的開關(guān)可以通過不同的電線來控制不同的電器開關(guān)請求發(fā)送者電燈請求的最終接收者和處理者開關(guān)和電燈之間并不存在直接耦合關(guān)系,它們通過電線連接在一起,使用不同的電線可以連接不同的請求接收者命令模式概述分析軟件開發(fā)按鈕請求發(fā)送者事件處理類請求的最終接收者和處理者發(fā)送者與接收者之間引入了新的命令對象(類似電線),將發(fā)送者的請求封裝在命令對象中,再通過命令對象來調(diào)用接收者的方法相同的按鈕可以對應(yīng)不同的事件處理類命令模式概述動機(jī)將請求發(fā)送者和接收者完全解耦發(fā)送者與接收者之間沒有直接引用關(guān)系發(fā)送請求的對象只需要知道如何發(fā)送請求,而不必知道如何完成請求命令模式命令模式概述命令模式的定義對象行為型模式命令模式:將一個(gè)請求封裝為一個(gè)對象,從而讓你可以用不同的請求對客戶進(jìn)行參數(shù)化,對請求排隊(duì)或者記錄請求日志,以及支持可撤銷的操作。CommandPattern:Encapsulatearequestasanobject,therebylettingyouparameterizeclientswithdifferentrequests,queueorlogrequests,andsupport

undoableoperations.命令模式概述命令模式的定義別名為動作(Action)模式或事務(wù)(Transaction)模式“用不同的請求對客戶進(jìn)行參數(shù)化”“對請求排隊(duì)”“記錄請求日志”“支持可撤銷操作”命令模式的結(jié)構(gòu)與實(shí)現(xiàn)命令模式的結(jié)構(gòu)命令躺模式賢的結(jié)層構(gòu)與誓實(shí)現(xiàn)命令努模式芽的結(jié)鞠構(gòu)命令棍模式峽包含丟以下4個(gè)角肝色:Co傳mm聽an種d(抽襲象命斤令類臣)Co干nc羽re戶te練Co獸mm飾an俯d(具猜體命疫令類靈)In日vo替ke哥r(調(diào)設(shè)用者翅)Re登ce型iv硬er(接壺收者毅)命令庫模式感的結(jié)回構(gòu)與球?qū)崿F(xiàn)命令卷模式反的實(shí)銅現(xiàn)命令偷模式糟的本得質(zhì)是對請湖求進(jìn)墾行封仍裝一個(gè)歡請求每對應(yīng)澤于一橡個(gè)命儲令,將賣發(fā)出戚命令耍的責(zé)射任和葛執(zhí)行嘆命令玻的責(zé)傘任分耍開命令蠢模式允許大請求妖的一酬方和愈接收胃的一線方獨(dú)堪立開失來,使鳳得請求芒的一吹方不步必知四道接腸收請拍求的加一方澤的接敞口,更眼不必理知道請求輩如何若被接稿收、操作啄是否搜被執(zhí)筍行、何時(shí)股被執(zhí)析行,以趟及是怎么犁被執(zhí)君行的命令凳模式穿的結(jié)銅構(gòu)與朵實(shí)現(xiàn)命令嘩模式慢的實(shí)補(bǔ)現(xiàn)典型鉤的抽羽象命疾令類淺代碼蜂:abstractclassCommand{publicabstractvoidExecute();}命令瞧模式撿的結(jié)權(quán)構(gòu)與賭實(shí)現(xiàn)命令員模式劣的實(shí)雀現(xiàn)典型栗的調(diào)繡用者勸(請姨求發(fā)鳴送者廢)類滴代碼兇:classInvoker{privateCommandcommand;

//構(gòu)造注入

publicInvoker(Commandcommand){mand=command;}

publicCommandCommand{get{returncommand;}//設(shè)值注入

set{command=value;}} //業(yè)務(wù)方法,用于調(diào)用命令類的方法

publicvoidCall(){command.Execute();}}命令察模式勝的結(jié)僑構(gòu)與揮實(shí)現(xiàn)命令倦模式喬的實(shí)帶現(xiàn)典型飄的具老體命視令類躲代碼班:classConcreteCommand:Command{ privateReceiverreceiver;//維持一個(gè)對請求接收者對象的引用

publicoverridevoidExecute() { receiver.Action();//調(diào)用請求接收者的業(yè)務(wù)處理方法Action() }}命令鏟模式避的結(jié)悟構(gòu)與埋實(shí)現(xiàn)命令桌模式煤的實(shí)添現(xiàn)典型干的請沙求接宮收者盈類代初碼:classReceiver{ publicvoidAction() { //具體操作 }}命令氏模式圈的應(yīng)狀用實(shí)豆例實(shí)例噸說明為了用戶使用方便,某系統(tǒng)提供了一系列功能鍵,用戶可以自定義功能鍵的功能,例如功能鍵FunctionButton可以用于退出系統(tǒng)(由SystemExitClass類來實(shí)現(xiàn)),也可以用于顯示幫助文檔(由DisplayHelpClass類來實(shí)現(xiàn))。用戶可以通過修改配置文件來改變功能鍵的用途,現(xiàn)使用命令模式來設(shè)計(jì)該系統(tǒng),使得功能鍵類與功能類之間解耦,可為同一個(gè)功能鍵設(shè)置不同的功能。命令惠模式米的應(yīng)腸用實(shí)拆例實(shí)例守類圖功能導(dǎo)鍵設(shè)排置結(jié)勝構(gòu)圖命令邊模式鵝的應(yīng)篩用實(shí)倆例實(shí)例斥代碼(1荷)趙Fu思nc紀(jì)ti輪on朋Bu蚊tt定on:功懇能鍵燒類,簽充當(dāng)芽請求縮慧調(diào)用肺者(起請求納發(fā)送柄者)(2撿)完Co伍mm埋an拿d:抽冬象命萌令類(3猶)輝Ex笛it父Co貸mm席an顫d:退灣出命音令類忌,充行當(dāng)具宮體命竿令類(4牛)仗He跌lp崖Co黎mm羞an季d:幫誤助命委令類宋,充盛當(dāng)具光體命龜令類(5獲)掏Sy此st瓣em爬Ex霉it身Cl死as前s:退但出系晝統(tǒng)模怎擬實(shí)姨現(xiàn)類祥,充林當(dāng)請愚求接背收者(6花)火Di介sp謠la義yH達(dá)el籃pC脈la刮ss:顯掉示幫解助文芒檔模諷擬實(shí)勵現(xiàn)類改,充停當(dāng)請抱求接界收者(7府)配置巖文件Ap綁p.遵co局nf職ig(8派)炎Pr闖og坡ra格m:客吧戶端諒測試唱類演示……參考臣代碼(D頂es餐ig欄nP貌at陜te般rn戚\C具om障ma綢nd在Sa糕mp掠le坡)命令拳模式蛛的應(yīng)蜂用實(shí)秤例結(jié)果師及分稍析如果磚需要邀更換錯(cuò)具體層命令喇類,米無須剛修改嘩源代賽碼,曉只需撒修改配置獻(xiàn)文件,完釣全符合綢開閉如原則每一端個(gè)具體沈命令睛類對應(yīng)嬌一個(gè)請求拌的處待理者初(接酬收者往),通援過向夠請求榮發(fā)送察者注腥入不欣同的虜具體膛命令終對象予可以許使相晌同的徹發(fā)送鋸者對委應(yīng)不霧同的黑接收尾者,科從而矛實(shí)現(xiàn)餡“將一軌個(gè)請拼求封漿裝為孔一個(gè)雪對象重,用辦不同宰的請茄求對腦客戶摟進(jìn)行哀參數(shù)銹化”,客戶氣端只慕需要麥將具且體命全令對修象作遼為參迅數(shù)注企入請毛求發(fā)旗送者膊,無課須直園接操泄作請消求的栽接收辭者<?xmlversion="1.0"encoding="utf-8"?><configuration><appSettings><addkey="command"value="CommandSample.HelpCommand"/></appSettings></configuration>實(shí)現(xiàn)戶命令星隊(duì)列動機(jī)當(dāng)一稿個(gè)請螺求發(fā)想送者眼發(fā)送區(qū)一個(gè)娘請求筑時(shí),垂有不止乞一個(gè)鍬請求紹接收鼠者產(chǎn)劈燕生響靠應(yīng),這意些請賄求接勢收者曉將逐歲個(gè)執(zhí)乳行業(yè)度務(wù)方灑法,刑完成銷對請狡求的裁處理增加綠一個(gè)Co慕mm易an摸dQ舌ue世ue類,由綱該類蕩負(fù)責(zé)存儲伏多個(gè)棋命令售對象,而銀不同欲的命優(yōu)令對還象可拾以對佳應(yīng)不海同的底請求兼接收息者批處浪理實(shí)現(xiàn)陸命令頭隊(duì)列實(shí)現(xiàn)usingSystem.Collections.Generic;namespaceCommandSample{classCommandQueue{//定義一個(gè)List來存儲命令隊(duì)列

privateList<Command>commands=newList<Command>();publicvoidAddCommand(Commandcommand){commands.Add(command);}publicvoidRemoveCommand(Commandcommand){commands.Remove(command);}//循環(huán)調(diào)用每一個(gè)命令對象的Execute()方法

publicvoidExecute(){foreach(objectcommandincommands){ ((Command)command).Execute();}}}}記錄少請求鞭日志動機(jī)將請借求的框歷史介記錄槐保存前下來,通奮常以日志殺文件(L血og送F裁il多e)的形職式永街久存企儲在葬計(jì)算炸機(jī)中為系神統(tǒng)提旁供一睡種恢復(fù)勤機(jī)制可以弦用于箱實(shí)現(xiàn)批處忌理防止奇因?yàn)閵蕯嚯婔敾蛘吖到y(tǒng)嚷重啟喪等原善因造絹成請節(jié)求丟衣失,而趴且可仿以避免幕重新滲發(fā)送成全部囑請求烈時(shí)造版成某研些命店令的磁重復(fù)秒執(zhí)行記錄工請求朵日志實(shí)現(xiàn)將發(fā)福送請攪求的示命令含對象通過拆序列退化寫曬到日鼓志文此件中命令剖類必福須使嗽用屬服性[S搬er鄭ia顧li援za勵bl甚e]標(biāo)記辣為可序添列化命令醫(yī)對象日志彎文件序列載化實(shí)現(xiàn)妖撤銷抱操作實(shí)例可以節(jié)通過向?qū)γ锪铑惒钸M(jìn)行針修改萍使得輕系統(tǒng)良支持撤銷(U稼nd圍o)操作和恢復(fù)(R墾ed桐o)操作設(shè)計(jì)一個(gè)簡易計(jì)算器,該計(jì)算器可以實(shí)現(xiàn)簡單的數(shù)學(xué)運(yùn)算,還可以對運(yùn)算實(shí)施撤銷操作。實(shí)現(xiàn)拾撤銷褲操作結(jié)構(gòu)簡易或計(jì)算價(jià)器結(jié)碎構(gòu)圖實(shí)現(xiàn)母撤銷馳操作實(shí)現(xiàn)加法煙類:Ad弦de毀r(請?jiān)┣蠼有Q收者就)抽象搶命令蒜類:Ab額st園ra漂ct砌Co速mm滲an倒d加法亡命令慮類:Ad劍dC紅om古ma踏nd(具機(jī)體命舉令類鋒)計(jì)算故器界雕面類拋:Ca堵lc箏ul耍at矮or銹Fo捷rm(請捐求發(fā)券送者鎮(zhèn))客戶椅端測木試類岸:Pr遞og熟ra炸m演示……參考臟代碼(D悔es袍ig酒nP體at辭te潛rn追\C慘om宗ma哀nd嗚Un勻do搭Sa倚mp欲le姓)宏命回令動機(jī)宏命布令(M紛ac槐ro恒C法om屢ma研nd孤)又稱層為組合腐命令(C乳om飄po化si盟te權(quán)C該om瞇ma架nd霉),它英是組合衡模式李和命痕令模洪式聯(lián)用頑的產(chǎn)租物宏命恰令是唱一個(gè)攝具體溝命令刺類,交它擁有妄一個(gè)躲集合,在望該集萄合中查包含邊了對現(xiàn)其他劍命令夏對象腫的引廚用當(dāng)調(diào)技用宏趕命令萌的Ex側(cè)ec具ut功e(溜)方法晴時(shí),將遞最歸調(diào)挨用它行所包金含的筋每個(gè)處成員植命令代的Ex亦ec啟ut她e(茫)方法拴。一個(gè)撿宏命架令的受成員善可以賴是簡孟單命浸令,呀還可招以繼甩續(xù)是揀宏命灣令執(zhí)行杠一個(gè)貫宏命倦令將璃觸發(fā)委多個(gè)樣具體駁命令單的執(zhí)槽行,飾從而實(shí)現(xiàn)宅對命朋令的儀批處擴(kuò)理宏命漿令結(jié)構(gòu)命令應(yīng)模式磚的優(yōu)栗缺點(diǎn)肆與適病用環(huán)耀境模式憐優(yōu)點(diǎ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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論