版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面向對象的技術與方法共69頁第2頁Proxy模式目的為其他對象提供一種代理以控制對這個對象的訪問。說白了就是,在一些情況下客戶不想或者不能直接引用一個對象,而代理對象可以在客戶和目標對象之間起到中介作用,去掉客戶不能看到的內容和服務或者增添客戶需要的額外服務。共69頁第3頁Proxy模式問題:對于每一個開銷很大的對象,應該根據(jù)需要進行創(chuàng)建,當一個圖像變?yōu)榭梢姇r會產(chǎn)生這樣的需要。但是在文檔中我們用什么來代替這個圖像呢?我們又如何才能隱藏根據(jù)需要創(chuàng)建圖像這一事實,從而不會使得編輯器的實現(xiàn)復雜化呢?共69頁第4頁Proxy模式問題的解決方案是使用另一個對象,即圖像Proxy,替代那個真正的圖像。Proxy可以代替一個圖像對象,并且在需要時負責實例化這個圖像對象。共69頁第5頁Proxy模式結構圖共69頁第6頁Proxy模式分類:1)遠程代理(RemoteProxy)為一個對象在不同的地址空間提供局部代表。2)虛代理(VirtualProxy)根據(jù)需要將一個資源消耗很大或者比較復雜的對象延遲的真正需要時才創(chuàng)建。3)保護代理(ProtectionProxy)控制對原始對象的訪問。共69頁第7頁Proxy模式4)智能引用(SmartReference)代理,當一個對象被引用時,提供一些額外的操作,比如將對此對象調用的次數(shù)記錄下來等。共69頁第8頁Proxy模式結構共69頁第9頁Proxy模式運行時刻一種可能的代理結構的對象圖。共69頁第10頁Proxy模式舉例:簡單的論壇的權限管理—發(fā)貼功能聲明了真實對象和代理對象的共同接口:classMyForum{
public:virtualvoidAddFile()=0;
}
共69頁第11頁Proxy模式代理對象類:classMyForumProxy:publicMyForum{
private:RealMyForum*forum;
intpermission;//權限值
public:MyForumProxy(intpermission)
{
forum=newRealMyForum()
this->permission=permission;
}
共69頁第12頁Proxy模式
voidAddFile()//實現(xiàn)的接口
{
//滿足權限設置的時候才能夠執(zhí)行操作
if(“registered”==permission)
{
forum->AddFile();
}
else
cout<<"YouarenotalegaluserofMyForum,pleaseregister!";
}
};共69頁第13頁Proxy模式實體對象類:classMyForumProxy:publicMyForum{
voidAddFile()//實現(xiàn)的接口
{
//實現(xiàn)發(fā)貼功能
}
};共69頁第14頁Proxy模式說明:為其他對象提供一種代理以控制對這個對象的訪問。也就是說當我們不能直接訪問我們想訪問的對象時,必須通過一個代理對象來訪問。共69頁第15頁Proxy模式proxy模式與adapter模式關系:都是為一個對象提供一種前置的接口。但是,變壓器模式的用意是要改變所考慮的對象的接口;而代理模式并不能改變所代理的對象的接口,在這一點上兩個模式有明顯的區(qū)別。共69頁第16頁Mediator模式問題:
面向對象設計鼓勵將行為分布到各個對象中。這種分布可能會導致對象間有許多連接。在最壞的情況下,每一個對象都知道其他所有對象。共69頁第17頁Mediator模式目的:用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。共69頁第18頁Mediator模式可以通過將集體行為封裝在一個單獨的中介者(mediator)對象中以避免這個問題。中介者負責控制和協(xié)調一組對象間的交互。中介者充當一個中介以使組中的對象不再相互顯式引用。這些對象僅知道中介者,從而減少了相互連接的數(shù)目。共69頁第19頁Mediator模式例如,一個圖形用戶界面中對話框的實現(xiàn)共69頁第20頁Mediator模式FontDialogDirector可作為一個對話框中的窗口組件間的中介者。共69頁第21頁Mediator模式交互圖說明了各對象如何協(xié)作處理一個列表框中選項的變化。共69頁第22頁Mediator模式FontDialogDirector抽象怎樣被集成到一個類庫中,如下圖所示:共69頁第23頁Mediator模式結構共69頁第24頁Mediator模式一個典型的對象結構可能如下圖所示:共69頁第25頁代碼示例抽象類DialogDirector為導控者定義了一個接口。共69頁第26頁Widget是窗口組件的抽象基類。一個窗口組件知道它的導控者。共69頁第27頁Changed調用導控者的WidgetChanged操作。通知導控者某個重要事件發(fā)生了。共69頁第28頁ListBox、EntryField和Button是Widget的子類,用作特定的用戶界面構成元素。ListBox提供了一個GetSelection操作來得到當前的選擇項,而EntryField的SetText操作則將新的正文放入該域中。共69頁第29頁共69頁第30頁Button是一個簡單的窗口組件,它一旦被按下就調用Changed。這是在其HandleMouse的實現(xiàn)中完成的:共69頁第31頁FontDialogDirectator類在對話框中的窗口組件間進行中介。FontDialogDirectator是
DialogDirectator的子類:共69頁第32頁FontDialogDirectator跟蹤它顯示的窗口組件。它重定義CreateWidgets以創(chuàng)建窗口組件并初始化對它們的引用:共69頁第33頁WidgetChanged保證窗口組件正確地協(xié)同工作:共69頁第34頁Mediator模式效果1)它將各Colleague解耦2)它簡化了對象協(xié)議3)它對對象如何協(xié)作進行了抽象4)它使控制集中化,集中的優(yōu)點就是便于管理,也正是符合了OO設計中的每個類的職責要單一和集中的原則。共69頁第35頁Mediator模式總結說明:定義:用一個中介對象來封裝一系列的對象交互特點:中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互好處:降低復雜度.所有對象都只和Mediator中介者單線聯(lián)系.而中介者隱式的包含了對象之間的關系使原本多對多的關系變成1對多關系共69頁第36頁Mediator模式總結用途:主要用于簡化以下類型的系統(tǒng):
1、有多個對象
2、多個對象之間有著復雜的聯(lián)系
Mediator模式在事件驅動類應用中比較多,例如界面設計GUI.;聊天,消息傳遞等,在聊天應用中,需要有一個MessageMediator,專門負責request/response之間任務的調節(jié).共69頁第37頁Observe模式示例:共69頁第38頁Observe模式目的:定義對象間的一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。共69頁第39頁Observe模式Observer的一個實例:
Model/View/Control(MVC)
實現(xiàn)了業(yè)務邏輯和表示層的解耦MFC中,Doc/View(文檔視圖結構)提供了實現(xiàn)MVC的框架結構在Java陣容中,Struts則提供了實現(xiàn)MVC的框架結構共69頁第40頁Observe模式結構:共69頁第41頁Observe模式交互圖共69頁第42頁Observe模式示例:實現(xiàn)時間的兩種顯示一個抽象類定義了Observer接口:共69頁第43頁Observe模式一個抽象類定義了Subject接口:共69頁第44頁Observe模式共69頁第45頁Observe模式ClockTimer提供了一個接口用于取出單個的時間單位如小時,分鐘,和秒。共69頁第46頁Observe模式Tick操作由一個內部計時器以固定的時間間隔調用,從而提供一個精確的時間基準。Tick更新ClockTimer的內部狀態(tài)并調用Notify通知觀察者:共69頁第47頁Observe模式現(xiàn)在我們可以定義一個DigitalClock類來顯示時間。它從一個用戶界面工具箱提供的Widget類繼承了它的圖形功能。通過繼承Observer,Observer接口被融入DigitalClock的接口。共69頁第48頁Observe模式共69頁第49頁Observe模式共69頁第50頁Observe模式共69頁第51頁Observe模式共69頁第52頁Observe模式一個AnalogClock可用相同的方法定義共69頁第53頁Observe模式測試代碼:共69頁第54頁Observe模式
在Java語言中還提供了專門的接口實現(xiàn)Observer模式:通過專門的類Observable及Observer接口來實現(xiàn)MVC編程模式,其UML圖可以表示為:共69頁第55頁Observe模式共69頁第56頁Strategy模式目的定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。本模式使得算法可獨立于使用它的客戶而變化。給業(yè)務邏輯(算法)具體實現(xiàn)和抽象接口之間的解耦。共69頁第57頁適用性許多相關的類僅僅是行為有異。需要使用一個算法的不同變體。算法使用客戶不應該知道的數(shù)據(jù)。一個類定義了多種行為,并且這些行為在這個類的操作中以多個條件語句的形式出現(xiàn)。Strategy模式共69頁第58頁結構Strategy模式共69頁第59頁Strategy模式示例:實現(xiàn)從鍵盤讀入字符并輸出打印的程序。CopyReadKeyboardWritePrinter共69頁第60頁Strategy模式Copy程序voidCopy(){intc;while((c=RdKbd()!=EOF))WrtPrt(c);}共69頁第61頁Strategy模式需求在變化
希望Copy程序能從紙帶讀入機中讀入信息。該如何響應此變化?給Copy函數(shù)添加boolean參數(shù)變量?若是,則會帶來大量其他調用Copy函數(shù)的地方的改變。共69頁第62頁Strategy模式保持接口不變,修改結果:BoolptFlag=false;//remembertoresetthisflagvoidCopy(){intc;while((c=(ptFlag?Rdpt():RdKbd()))!=EOF))WrtPrt(c);}共69頁第63頁Strategy模式得寸進尺希望Copy程序可以輸出到紙帶穿孔機上。
又該怎么辦呢?共69頁第64頁Strategy模式boolptFlag=false;//remembertoresetthisflagboolpunchFlag=false;//remembertoresetthisflagvoidCopy(){intc;while((c=(ptFlag?Rdpt():RdKbd()))!=EOF))punchFlag?WrtPunch(c):WrtPrt(c);}共69頁第65頁Strategy模式如果再有新的需求變化又該如何???采用Strategy模式對問題進行重新設計共69頁第66頁Strategy模式classReader{ public:virtualintread()=0;};classKeyboardReader:publicReader{ public:virtua
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024施工班組合同范本
- 二零二五年度特色果園租賃與果樹新品種引進合同3篇
- 二零二五年度版權購買合同with版權作品的種類和數(shù)量
- 2025版五星級酒店客房及公共區(qū)域使用權租賃合同3篇
- 鋼鐵行業(yè)前臺工作總結
- 二零二五年度picc海洋運輸貨物保險合同條款與保險責任范圍3篇
- 二零二五年度綠色環(huán)保瓦工勞務合作合同3篇
- 南昌工程學院《決策分析》2023-2024學年第一學期期末試卷
- 2024版環(huán)境影響評估服務合同
- 湖南三一工業(yè)職業(yè)技術學院《中學數(shù)學基本教學技能》2023-2024學年第一學期期末試卷
- 牙科門診病歷
- SYT 6276-2014 石油天然氣工業(yè)健康、安全與環(huán)境管理體系
- 注射用更昔洛韋的臨床療效研究
- 小學三年級上冊豎式計算題
- 機場亮化工程
- 2024年青海西部機場集團青海機場有限公司招聘筆試參考題庫含答案解析
- 2023年小學科學教研組教研工作總結(5篇)
- 中國綠色建筑現(xiàn)狀與未來展望
- 三年級上冊遞等式計算練習300題及答案
- 政治畫像品德操守自我評價3篇
- 奶茶督導述職報告
評論
0/150
提交評論