• <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
            久久乐国产综合亚洲精品| 久久精品中文无码资源站| 久久99中文字幕久久| 51久久夜色精品国产| 亚洲伊人久久综合影院| 伊人久久大香线蕉综合Av | 综合人妻久久一区二区精品| 久久亚洲AV成人出白浆无码国产| 国产91久久综合| 久久久久久综合网天天| 国产精品99久久久久久www| 中文字幕人妻色偷偷久久| 国产一区二区三精品久久久无广告| 久久福利资源国产精品999| 亚洲嫩草影院久久精品| 亚洲AV日韩精品久久久久久| 亚洲国产成人精品女人久久久| 9久久9久久精品| 奇米影视7777久久精品| 久久亚洲日韩看片无码| 久久av免费天堂小草播放| 高清免费久久午夜精品| 久久精品www人人爽人人| 久久人妻少妇嫩草AV蜜桃| 久久人妻少妇嫩草AV蜜桃| 国产亚州精品女人久久久久久 | 久久99国产精品久久99小说| 99久久精品免费看国产免费| 国内精品人妻无码久久久影院 | 久久精品嫩草影院| 国内精品久久久人妻中文字幕| 性欧美大战久久久久久久久| 久久精品久久久久观看99水蜜桃| 亚洲欧美一级久久精品| 亚洲人成无码www久久久| 伊人色综合久久天天人守人婷| 日韩美女18网站久久精品| 一本大道久久香蕉成人网| 久久久久久精品无码人妻| 伊人久久大香线蕉亚洲五月天| 久久久www免费人成精品|