版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
DesignPatterns職責(zé)鏈模式劉偉(Sunny)大綱行為型模式職責(zé)鏈模式概述職責(zé)鏈模式的結(jié)構(gòu)與實(shí)現(xiàn)職責(zé)鏈模式的應(yīng)用實(shí)例純與不純的職責(zé)鏈模式職責(zé)鏈模式的優(yōu)缺點(diǎn)與適用環(huán)境2行為型模式行為型模式(BehavioralPattern)
關(guān)注系統(tǒng)中對象之間的交互,研究系統(tǒng)在運(yùn)行時(shí)對象之間的相互通信與協(xié)作,進(jìn)一步明確對象的職責(zé)行為型模式:不僅僅關(guān)注類和對象本身,還重點(diǎn)關(guān)注它們之間的相互作用和職責(zé)劃分3行為型模式類行為型模式使用繼承關(guān)系在幾個(gè)類之間分配行為,主要通過多態(tài)等方式來分配父類與子類的職責(zé)對象行為型模式使用對象的關(guān)聯(lián)關(guān)系來分配行為,主要通過對象關(guān)聯(lián)等方式來分配兩個(gè)或多個(gè)類的職責(zé)4行為型模式行為型模式一覽表模式名稱定義學(xué)習(xí)難度使用頻率職責(zé)鏈模式(ChainofResponsibilityPattern)避免將一個(gè)請求的發(fā)送者與接收者耦合在一起,讓多個(gè)對象都有機(jī)會(huì)處理請求。將接收請求的對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有一個(gè)對象能夠處理它為止?!铩铩铩睢睢铩铩睢睢蠲钅J?CommandPattern)將一個(gè)請求封裝為一個(gè)對象,從而讓你可以用不同的請求對客戶進(jìn)行參數(shù)化,對請求排隊(duì)或者記錄請求日志,以及支持可撤銷的操作?!铩铩铩睢睢铩铩铩铩罱忉屍髂J?InterpreterPattern)給定一個(gè)語言,定義它的文法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來解釋語言中的句子?!铩铩铩铩铩铩睢睢睢畹髂J?IteratorPattern)提供一種方法順序訪問一個(gè)聚合對象中的各個(gè)元素,且不用暴露該對象的內(nèi)部表示?!铩铩铩睢睢铩铩铩铩镏薪檎吣J?MediatorPattern)定義一個(gè)對象來封裝一系列對象的交互。中介者模式使各對象之間不需要顯式地相互引用,從而使其耦合松散,而且讓你可以獨(dú)立地改變它們之間的交互。★★★☆☆★★☆☆☆備忘錄模式(MementoPattern)在不破壞封裝的前提下,捕獲一個(gè)對象的內(nèi)部狀態(tài),并在該對象之外保存這個(gè)狀態(tài),這樣可以在以后將對象恢復(fù)到原先保存的狀態(tài)?!铩铩睢睢睢铩铩睢睢钣^察者模式(ObserverPattern)定義對象之間的一種一對多依賴關(guān)系,使得每當(dāng)一個(gè)對象狀態(tài)發(fā)生改變時(shí),其相關(guān)依賴對象都得到通知并被自動(dòng)更新?!铩铩铩睢睢铩铩铩铩餇顟B(tài)模式(StatePattern)允許一個(gè)對象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對象看起來似乎修改了它的類?!铩铩铩睢睢铩铩铩睢畈呗阅J?StrategyPattern)定義一系列算法,將每一個(gè)算法封裝起來,并讓它們可以相互替換,策略模式讓算法可以獨(dú)立于使用它的客戶變化。★☆☆☆☆★★★★☆模板方法模式(TemplateMethodPattern)定義一個(gè)操作中算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟?!铩铩睢睢睢铩铩铩睢钤L問者模式(VisitorPattern)表示一個(gè)作用于某對象結(jié)構(gòu)中的各個(gè)元素的操作。訪問者模式讓你可以在不改變各元素的類的前提下定義作用于這些元素的新操作?!铩铩铩铩睢铩睢睢睢?職責(zé)鏈模式概述獎(jiǎng)學(xué)金審批示意圖6職責(zé)鏈模式概述分析輔導(dǎo)員、系主任、院長、校長都可以處理獎(jiǎng)學(xué)金申請表,他們構(gòu)成一個(gè)處理申請表的鏈?zhǔn)浇Y(jié)構(gòu),申請表沿著這條鏈進(jìn)行傳遞,這條鏈就稱為職責(zé)鏈職責(zé)鏈可以是一條直線、一個(gè)環(huán)或者一個(gè)樹形結(jié)構(gòu),最常見的職責(zé)鏈?zhǔn)侵本€型,即沿著一條單向的鏈來傳遞請求7職責(zé)鏈模式概述職責(zé)鏈模式的定義對象行為型模式職責(zé)鏈模式:避免將一個(gè)請求的發(fā)送者與接收者耦合在一起,讓多個(gè)對象都有機(jī)會(huì)處理請求。將接收請求的對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有一個(gè)對象能夠處理它為止。ChainofResponsibilityPattern:Avoidcouplingthesenderofarequesttoitsreceiverbygivingmorethanoneobjectachancetohandletherequest.Chainthereceivingobjectsandpasstherequestalongthechainuntilanobjecthandlesit.8職責(zé)鏈模式概述職責(zé)鏈模式的定義又稱為責(zé)任鏈模式(翻譯不同,)將請求的處理者組織成一條鏈,并讓請求沿著鏈傳遞,由鏈上的處理者對請求進(jìn)行相應(yīng)的處理客戶端無須關(guān)心請求的處理細(xì)節(jié)以及請求的傳遞,只需將請求發(fā)送到鏈上,將請求的發(fā)送者和請求的處理者解耦9職責(zé)鏈模式的結(jié)構(gòu)與實(shí)現(xiàn)職責(zé)鏈模式的結(jié)構(gòu)10職責(zé)鏈模式的結(jié)構(gòu)與實(shí)現(xiàn)職責(zé)鏈模式的結(jié)構(gòu)職責(zé)鏈模式包含以下兩個(gè)角色:Handler(抽象處理者)ConcreteHandler(具體處理者)11職責(zé)鏈模式的結(jié)構(gòu)與實(shí)現(xiàn)職責(zé)鏈模式的實(shí)現(xiàn)典型的抽象處理者代碼:abstractclassHandler{ //維持對下家的引用
protectedHandlersuccessor;
publicvoidSetSuccessor(Handlersuccessor){ this.successor=successor; }
publicabstractvoidHandleRequest(stringrequest);}12職責(zé)鏈模式的結(jié)構(gòu)與實(shí)現(xiàn)職責(zé)鏈模式的實(shí)現(xiàn)典型的具體處理者代碼:classConcreteHandler:Handler{ publicoverridevoidHandleRequest(stringrequest){ if(請求滿足條件){ //處理請求
} else{ this.successor.HandleRequest(request);//轉(zhuǎn)發(fā)請求
} }}13職責(zé)鏈模式的結(jié)構(gòu)與實(shí)現(xiàn)職責(zé)鏈模式的實(shí)現(xiàn)典型的客戶端代碼:……Handlerhandler1,handler2,handler3;handler1=newConcreteHandlerA();handler2=newConcreteHandlerB();handler3=newConcreteHandlerC();//創(chuàng)建職責(zé)鏈handler1.SetSuccessor(handler2);handler2.SetSuccessor(handler3);//發(fā)送請求,請求對象通常為自定義類型handler1.HandleRequest("請求對象");……14職責(zé)鏈模式的應(yīng)用實(shí)例實(shí)例說明某企業(yè)的SCM(SupplyChainManagement,供應(yīng)鏈管理)系統(tǒng)中包含一個(gè)采購審批子系統(tǒng)。該企業(yè)的采購審批是分級進(jìn)行的,即根據(jù)采購金額的不同由不同層次的主管人員來審批,主任可以審批5萬元以下(不包括5萬元)的采購單,副董事長可以審批5萬元至10萬元(不包括10萬元)的采購單,董事長可以審批10萬元至50萬元(不包括50萬元)的采購單,50萬元及以上的采購單就需要開董事會(huì)討論決定。如下圖所示:采購單分級審批示意圖現(xiàn)使用職責(zé)鏈模式設(shè)計(jì)并實(shí)現(xiàn)該系統(tǒng)。15職責(zé)鏈模式的應(yīng)用實(shí)例實(shí)例類圖采購單分級審批結(jié)構(gòu)圖16職責(zé)鏈模式的應(yīng)用實(shí)例實(shí)例代碼(1)PurchaseRequest:采購單類,充當(dāng)請求類(2)Approver:審批者類,充當(dāng)抽象處理者(3)Director:主任類,充當(dāng)具體處理者(4)VicePresident:副董事長類,充當(dāng)具體處理者(5)President:董事長類,充當(dāng)具體處理者(6)Congress:董事會(huì)類,充當(dāng)具體處理者(7)Program:客戶端測試類演示……參考代碼(DesignPattern\CoRSample)17職責(zé)鏈模式的應(yīng)用實(shí)例結(jié)果及分析增加一個(gè)經(jīng)理(Manager)角色//Manager.cs經(jīng)理類,充當(dāng)具體處理者usingSystem;namespaceCoRSample{classManager:Approver{publicManager(stringname):base(name){}//具體請求處理方法
publicoverridevoidProcessRequest(PurchaseRequestrequest){ if(request.Amount<80000){ Console.WriteLine("經(jīng)理{0}審批采購單:{1},金額:{2}元,采購目的:{3}。",,request.Number,request.Amount,request.Purpose);//處理請求
} else{ this.successor.ProcessRequest(request);//轉(zhuǎn)發(fā)請求
}}}}Approverrhuang;rhuang=newManager("黃蓉");客戶端代碼修改如下//創(chuàng)建職責(zé)鏈wjzhang.SetSuccessor(rhuang);//將“黃蓉”作為“張無忌”的下家rhuang.SetSuccessor(gyang);//將“楊過”作為“黃蓉”的下家gyang.SetSuccessor(jguo);jguo.SetSuccessor(meeting);主任張無忌審批采購單:10001,金額:45000元,采購目的:購買倚天劍。經(jīng)理黃蓉審批采購單:10002,金額:60000元,采購目的:購買《葵花寶典》。董事長郭靖審批采購單:10003,金額:160000元,采購目的:購買《金剛經(jīng)》。召開董事會(huì)審批采購單:10004,金額:800000元,采購目的:購買桃花島。18純與不純的職責(zé)鏈模式純的職責(zé)鏈模式一個(gè)具體處理者對象只能在兩個(gè)行為中選擇一個(gè):要么承擔(dān)全部責(zé)任,要么將責(zé)任推給下家不允許出現(xiàn)某一個(gè)具體處理者對象在承擔(dān)了一部分或全部責(zé)任后又將責(zé)任向下傳遞的情況一個(gè)請求必須被某一個(gè)處理者對象所接收,不能出現(xiàn)某個(gè)請求未被任何一個(gè)處理者對象處理的情況19純與不純的職責(zé)鏈模式不純的職責(zé)鏈模式允許某個(gè)請求被一個(gè)具體處理者部分處理后向下傳遞,或者一個(gè)具體處理者處理完某請求后其后繼處理者可以繼續(xù)處理該請求一個(gè)請求可以最終不被任何處理者對象所接收并處理JavaScript的事件浮升(EventBubbling)處理機(jī)制20職責(zé)鏈模式的優(yōu)缺點(diǎn)與適用場景模式優(yōu)點(diǎn)使得一個(gè)對象無須知道是其他哪一個(gè)對象處理其請求,降低了系統(tǒng)的耦合度可簡化對象之間的相互連接給對象職責(zé)的分配帶來更多的靈活性增加一個(gè)新
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)信用貸款代理業(yè)務(wù)合同4篇
- 二零二五版房屋漏水及損害賠償處理協(xié)議3篇
- 2025年銷售傭金合同范本與銷售團(tuán)隊(duì)管理3篇
- 2025年度人工智能一致行動(dòng)人合作協(xié)議4篇
- 二零二五年度商業(yè)鐵棚建設(shè)與安全管理合作協(xié)議4篇
- 二零二五版2025年度果品冷鏈物流配送服務(wù)合同2篇
- 《洗滌劑的去污原理》課件
- 二零二五年度家庭農(nóng)場畜牧業(yè)托管服務(wù)合同4篇
- 2025年度汽車安全系統(tǒng)股份購買協(xié)議4篇
- 2025年度海洋工程設(shè)備采購與運(yùn)營維護(hù)合同3篇
- 《色彩基礎(chǔ)》課程標(biāo)準(zhǔn)
- 人力資源 -人效評估指導(dǎo)手冊
- 大疆80分鐘在線測評題
- 2024屆廣東省廣州市高三上學(xué)期調(diào)研測試英語試題及答案
- 中煤平朔集團(tuán)有限公司招聘筆試題庫2024
- 2023年成都市青白江區(qū)村(社區(qū))“兩委”后備人才考試真題
- 不付租金解除合同通知書
- 區(qū)域合作伙伴合作協(xié)議書范本
- 中學(xué)數(shù)學(xué)教學(xué)設(shè)計(jì)全套教學(xué)課件
- 環(huán)衛(wèi)公司年終工作總結(jié)
- 2023年德宏隴川縣人民法院招聘聘用制書記員考試真題及答案
評論
0/150
提交評論