• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            為生存而奔跑

               :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

            留言簿(5)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            積分與排名

            • 積分 - 330206
            • 排名 - 74

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            代理模式,個(gè)人認(rèn)為就是把你要使用的一個(gè)對(duì)象盡享封裝,包裝。編程原對(duì)象的一個(gè)副本,在使用的時(shí)候直接使用他這個(gè)副本就可以了!他的作用用專業(yè)點(diǎn)的語(yǔ)言描 述就是為其他的對(duì)象提供一個(gè)代理方便控制這個(gè)對(duì)象。當(dāng)我們不能直接調(diào)用另外一個(gè)對(duì)象,但是又不得不用這個(gè)對(duì)象的某些功能,此時(shí)代理對(duì)象就能起到鏈接客戶和 目標(biāo)對(duì)象的一個(gè)代理.
            代理模式一般涉及到三個(gè)角色,分別為:
            1. 抽象角色:他提供真實(shí)對(duì)象和代理對(duì)象的共同接口。
            2. 代理角色:通俗地說(shuō),代理角色是對(duì)原對(duì)象(目標(biāo)對(duì)象)進(jìn)行包裝,他有著和原對(duì)象相同的接口,并且可以執(zhí)行真實(shí)對(duì)象的操作。
            3. 真實(shí)角色:即目標(biāo)對(duì)象,最終我們需要對(duì)他的操作。
            代理模式分為兩種,一 靜態(tài)代理,二 動(dòng)態(tài)代理。

            接下來(lái)我們介紹一下兩種代理模式:

            一 靜態(tài)代理
               靜態(tài)代理即 代理對(duì)象和被代理對(duì)象在代理之前已經(jīng)確定好了。他們一起實(shí)現(xiàn)相同的接口或者是繼承相同的抽象類。例如:
            Java代碼
            1. //定義抽象角色  
            2. public abstract class AbsRole{  
            3.   abstract public void work();  
            4. }  


            Java代碼
            1. //定義真實(shí)角色  
            2. public class RealRole extends AbsRole{  
            3.   public RealRole(){ }  
            4.   
            5.   public void work(){  
            6.     System.out.println("調(diào)用真實(shí)角色中函數(shù)!");  
            7.   }  
            8. }  

            Java代碼
            1. //代理角色  
            2. public class ProxyRole extends AbsRole{  
            3.   public RealRole real ;  
            4.     
            5.   public ProxyRole(){  
            6.   }  
            7.   
            8.   public void work(){  
            9.     this.beforeMethod();  
            10.     if(real == null){  
            11.       real = new RealRole();  
            12.     }  
            13.     real.work();  
            14.     this.endMethod();  
            15.   }  
            16.   
            17.   public void beforeMethod(){  
            18.     System.out.println("代理前執(zhí)行函數(shù)->beforeMethod()");  
            19.   }  
            20.     
            21.   public void endMethod(){  
            22.     System.out.println("代理時(shí)候后執(zhí)行函數(shù)->endMethod()");  
            23.   }  
            24. }  


            各種角色我們都已經(jīng)定義好了,我們開(kāi)始測(cè)試一下。

            Java代碼
            1. public class Main(){  
            2.   public static void main(String[] args){  
            3.     AbsRole ar = new ProxyRole();  
            4.     ar.work();  
            5.   }  
            6. }  


            二 動(dòng)態(tài)代理
              顧名思義,就是不知道到底那個(gè)類需要做代理,在使用的時(shí)候,更具情況臨時(shí)決定。
               java動(dòng)態(tài)代理主要是使用java.lang.reflect包中的兩個(gè)類。
            1. interface InvocationHandler: 他中定義了一個(gè)方法
            Java代碼
            1. public Object invoke(Object obj,Method method,Object[] obs)  

              其中第一個(gè)參數(shù) obj 指的是代理類,method是被代理的方法,obs是指被代理的方法的參數(shù)組。此方法由代理類來(lái)實(shí)現(xiàn)。
            2. Proxy:該類為動(dòng)態(tài)代理類,主要包括以下內(nèi)容:

            Java代碼
            1. protected Proxy(InvocationHandler h);  
            2.   
            3. static Class getProxyClass(ClassLoader loader,Class[] interfaces);  
            4.   
            5. static Object newProxyInstance(ClassLoader loader,Class[]interfaces,InvocationHandler h);  


            動(dòng)態(tài)代理其實(shí)是在運(yùn)行時(shí)生成class,所以,我們必須提供一組interface,然后告訴他class已經(jīng)實(shí)現(xiàn)了這些interface,而且在生成Proxy的時(shí)候,必須給他提供一個(gè)handler,讓他來(lái)接管實(shí)際的工作。
            現(xiàn)在我們把靜態(tài)代理的例子修改一下:
            Java代碼
            1. //定義抽象角色;  
            2. public interface AbsRole{  
            3.   public void work();  
            4. }  


            接下來(lái)定義真實(shí)角色;
            Java代碼
            1. public class RealRole implements AbsRole{  
            2.   public RealRole(){};  
            3.     
            4.   public void work(){  
            5.     System.out.println("調(diào)用真實(shí)角色方法:RealRole.work()");  
            6.   }  
            7. }  

            然后書寫動(dòng)態(tài)代理編碼
            Java代碼
            1. public class DynamicProxyRole implements InvocationHandler{  
            2.   private Object sub;  
            3.     
            4.   public DynamicProxyRole(){}  
            5.   
            6.   public DynamicProxyRole(Object ob){  
            7.     this.sub = ob;  
            8.   }  
            9.   
            10.   public Object invoke(Object proxy, Method method, Object[] obs) throws Throwable{  
            11.     method.invke(sub,obs);  
            12.     return null;  
            13.   }  
            14. }  

            代理類已經(jīng)書寫完畢,看看是否能正常運(yùn)行。
            Java代碼
            1. public class Main{  
            2.   public static void main(String[] args){  
            3.     RealRole  rr  = new RealRole();  
            4.     InvocationHandler dynamicProxy = new DynamicProxyRole(rr);  
            5.     Class<?> cls = rr.getClass();  
            6.       
            7.     AbsRole r = (AbsRole)Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),DynamicProxyRole);  
            8.     r.work();  
            9.   }  
            10. }  


            調(diào)試成功,動(dòng)態(tài)代理功能完成。

            通過(guò)靜態(tài)代理和動(dòng)態(tài)代理學(xué)習(xí),我們小結(jié)一下:
            靜態(tài)代理需要事先確定代理對(duì)象和被代理對(duì)象,他們要一起繼承或者是實(shí)現(xiàn)相同的抽象類。動(dòng)態(tài)代理可以在使用的時(shí)候傳入真實(shí)對(duì)象,得到代理。動(dòng)態(tài)代理還是主要依靠java本身的語(yǔ)言特性,實(shí)現(xiàn)代理,更加方便
            posted on 2009-11-28 13:13 baby-fly 閱讀(520) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Design Pattern
            久久精品中文闷骚内射| yy6080久久| 久久97久久97精品免视看| 久久久久噜噜噜亚洲熟女综合 | 99久久国产精品免费一区二区| 亚洲国产精品无码久久久蜜芽| 久久成人影院精品777| 久久久久久久免费视频| 久久棈精品久久久久久噜噜| 久久强奷乱码老熟女网站| 狠狠色狠狠色综合久久| 久久精品成人免费国产片小草| 国产亚洲精久久久久久无码| 色播久久人人爽人人爽人人片aV | 性欧美大战久久久久久久久 | 99国内精品久久久久久久| 伊人久久精品无码二区麻豆| 国产成人99久久亚洲综合精品| 无遮挡粉嫩小泬久久久久久久| 久久久久香蕉视频| 国内精品久久久久久久亚洲| 久久91精品国产91久久麻豆| 久久久久亚洲AV无码观看| 日韩久久无码免费毛片软件| www亚洲欲色成人久久精品| 成人久久久观看免费毛片| 久久国产免费观看精品3| 亚洲女久久久噜噜噜熟女| 国产精品99久久久精品无码| 一级做a爰片久久毛片免费陪| 久久播电影网| 久久夜色精品国产亚洲av| 久久99精品久久久久久不卡| 狠狠色伊人久久精品综合网| 久久99热国产这有精品| 91精品国产高清91久久久久久| 久久久久无码精品国产不卡| 一本一道久久综合狠狠老| 久久香综合精品久久伊人| 久久久亚洲AV波多野结衣| 无遮挡粉嫩小泬久久久久久久 |