結(jié)構(gòu)型模式代理_第1頁
結(jié)構(gòu)型模式代理_第2頁
結(jié)構(gòu)型模式代理_第3頁
結(jié)構(gòu)型模式代理_第4頁
結(jié)構(gòu)型模式代理_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

設(shè)計(jì)模式韓明2015年11月02日

5代理模式(Proxy)代理模式(Proxy)--概述Provideasurrogateorplaceholderforanotherobjecttocontrolaccesstoit.為其他對象提供一種代理以控制對這個對象的訪問。為什么要使用Proxy?1.授權(quán)機(jī)制不同級別的用戶對同一對象擁有不同的訪問權(quán)利。2.某個客戶端不能直接操作到某個對象,但又必須和那個對象有所互動。舉例兩個具體情況:(1)如果那個對象是一個是很大的圖片,需要花費(fèi)很長時間才能顯示出來,那么當(dāng)這個圖片包含在文檔中時,使用編輯器或?yàn)g覽器打開這個文檔,打開文檔必須很迅速,不能等待大圖片處理完成,這時需要做個圖片Proxy來代替真正的圖片。(2)如果那個對象在Internet的某個遠(yuǎn)端服務(wù)器上,直接操作這個對象因?yàn)榫W(wǎng)絡(luò)速度原因可能比較慢,那我們可以先用Proxy來代替那個對象??傊瓌t是,對于開銷很大的對象,只有在使用它時才創(chuàng)建,這個原則可以為我們節(jié)省很多寶貴的Java內(nèi)存?!癯橄髮ο蠼巧郝暶髁四繕?biāo)對象和代理對象的共同接口,這樣一來在任何可以使用目標(biāo)對象的地方都可以使用代理對象?!衲繕?biāo)對象角色:定義了代理對象所代表的目標(biāo)對象?!翊韺ο蠼巧捍韺ο髢?nèi)部含有目標(biāo)對象的引用,從而可以在任何時候操作目標(biāo)對象;代理對象提供一個與目標(biāo)對象相同的接口,以便可以在任何時候替代目標(biāo)對象。代理對象通常在客戶端調(diào)用傳遞給目標(biāo)對象之前或之后,執(zhí)行某個操作,而不是單純地將調(diào)用傳遞給目標(biāo)對象。代理模式(Proxy)--角色代理模式(Proxy)--類圖抽象對象角色publicabstractclassAbstractObject{//操作publicabstractvoidoperation();}目標(biāo)對象角色publicclassRealObjectextendsAbstractObject{@Overridepublicvoidoperation(){//一些操作System.out.println("一些操作");}}代理模式(Proxy)--源碼1代理對象角色publicclassProxyObjectextendsAbstractObject{RealObjectrealObject=newRealObject();@Overridepublicvoidoperation(){//調(diào)用目標(biāo)對象之前可以做相關(guān)操作System.out.println("before");realObject.operation();//調(diào)用目標(biāo)對象之后可以做相關(guān)操作System.out.println("after");}}代理模式(Proxy)--源碼1客戶端publicclassClient{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubAbstractObjectobj=newProxyObject();obj.operation();}}代理模式(Proxy)--源碼1用戶輸入三個代表三角形三邊長度的數(shù)值,代理對象驗(yàn)證用戶輸入的三個數(shù)值是否能構(gòu)成三角形,如果能構(gòu)成三角形,就創(chuàng)建一個三角形對象,并讓三角形對象計(jì)算自身的面積。代理模式(Proxy)--實(shí)例1.抽象主題(Subject):Geometry.javapublicinterfaceGeometry{publicdoublegetArea();}

代理模式(Proxy)--源碼22.具體模板(ConcreteTemplate):Trangle.javapublicclassTriangleimplementsGeometry{doublesideA,sideB,sideC,area;publicTriangle(doublea,doubleb,doublec){sideA=a;sideB=b;sideC=c;}publicdoublegetArea(){doublep=(sideA+sideB+sideC)/2.0;area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));returnarea;}}

代理模式(Proxy)--源碼23.代理(Proxy):TriangleProxy.javapublicclassTriangleProxyimplementsGeometry{doublesideA,sideB,sideC;Triangletriangle;publicvoidsetABC(doublea,doubleb,doublec){sideA=a;sideB=b;sideC=c;}publicdoublegetArea(){if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){triangle=newTriangle(sideA,sideB,sideC);doublearea=triangle.getArea();returnarea;}elsereturn-1;}}

代理模式(Proxy)--源碼24.應(yīng)用Application.java

importjava.util.Scanner;publicclassApplication{publicstaticvoidmain(Stringargs[]){Scannerreader=newScanner(System.in);System.out.println("請輸入三個數(shù),每輸入一個數(shù)回車確認(rèn)");doublea=-1,b=-1,c=-1;a=reader.nextDouble();b=reader.nextDouble();c=reader.nextDouble();TriangleProxyproxy=newTriangleProxy();proxy.setABC(a,b,c);doublearea=proxy.getArea();System.out.println("面積是:"+area);}}

代理模式(Proxy)--源碼2代理模式可以屏蔽用戶真正請求的對象,使用戶程序和真正的對象之間解耦。使用代理來擔(dān)當(dāng)那些創(chuàng)建耗時的對象的替身。代理模式(Proxy)--總結(jié)代理模式(Proxy)--最佳實(shí)踐代理模式給某一個對象提供一個代理對象,并由代理對象控制對源象的引用。代理就是一個人或一個機(jī)構(gòu)代表另一個人或者一個機(jī)構(gòu)采取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客和目標(biāo)對象直接起到中介的作用??蛻舳朔直娌怀龃碇黝}對象與真實(shí)主題對象。代理模式可以并不知道真正的被代理對象,而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創(chuàng)建被代理對象,被代理對象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。設(shè)計(jì)原則:(1)延遲加載,提高系統(tǒng)效率。(2)單一職責(zé)原則。代理模式在安全性控制,線程同步控制,緩存執(zhí)行結(jié)果,代理創(chuàng)建一些開銷很大的對象(例如,Hibernate使用

溫馨提示

  • 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

提交評論