亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java代理模式與動態代理模式詳解

2019-11-26 15:42:06
字體:
來源:轉載
供稿:網友

1、代理模式

所謂代理,就是一個人或者一個機構代表另一個人或者另一個機構采取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在客戶端和目標對象之前起到中介的作用。
代理模式給某一個對象提供一個代理對象,并由代理對象控制對原對象的引用。

生活中的例子:過年加班比較忙,沒空去買火車票,這時可以打個電話到附近的票務中心,叫他們幫你買張回家的火車票,當然這會附加額外的勞務費。但要清楚票務中心自己并不賣票,只有火車站才真正賣票,票務中心賣給你的票其實是通過火車站實現的。這點很重要!

上面這個例子,你就是“客戶”,票務中心就是“代理角色”,火車站是“真實角色”,賣票稱為“抽象角色”!


代理模式JAVA代碼示例:
抽象角色:抽象類或接口

復制代碼 代碼如下:

interface Business 

    void doAction(); 
}
 

真實角色:真正實現了業務邏輯接口

代理角色:自己并未實現業務邏輯接口,而是調用真實角色來實現

復制代碼 代碼如下:

class BusinessImplProxy implements Business 

    private BusinessImpl bi; 
    public void doAction() 
    { 
        if (bi==null) 
        { 
            bi = new BusinessImpl(); 
        } 
        doBefore(); 
        bi.doAction(); 
        doAfter(); 
    } 
    public void doBefore() 
    { 
        System.out.println("前置處理!"); 
    } 
    public void doAfter() 
    { 
        System.out.println("后置處理!"); 
    } 

//測試類 
class Test 

    public static void main(String[] args) 
    { 
        //引用變量定義為抽象角色類型 
        Business bi = new BusinessImplProxy(); 
        bi.doAction(); 
    } 
}

復制代碼 代碼如下:

<span></span>

所以,借助于JVM的支持,可以在運行時動態生成代理類(“代理角色”),我們就可以解決上述代理模式中代碼膨脹的問題,使用了動態代理后,“代理角色”將不用手動生成,而由JVM在運行時,通過指定類加載器、接口數組、調用處理程序這3個參數來動態生成。

動態代理模式JAVA代碼示例:

復制代碼 代碼如下:

import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Method;
 //抽象角色:java動態代理的實現目前只支持接口,不支持抽象類
 interface BusinessFoo
 {
     void foo();
 }
 interface BusinessBar
{
    String bar(String message);
}
//真實角色:真正實現業務邏輯方法
class BusinessFooImpl implements BusinessFoo
{
    public void foo()
    {
        System.out.println("BusinessFooImpl.foo()");
    }
}
class BusinessBarImpl implements BusinessBar
{
    public String bar(String message)
    {
        System.out.println("BusinessBarImpl.bar()");
        return message;
    }
}
//動態角色:動態生成代理類
class BusinessImplProxy implements InvocationHandler
{
    private Object obj;
    BusinessImplProxy() {
    }
    BusinessImplProxy(Object obj) {
        this.obj = obj;
    }
    public Object invoke(Object proxy,Method method,Object[] args) throws Throwable
    {
        Object result = null;
        doBefore();
        result = method.invoke(obj,args);
        doAfter();
        return result;
    }
    public void doBefore(){
        System.out.println("do something before Business Logic");
    }
    public void doAfter(){
        System.out.println("do something after Business Logic");
    }
    public static Object factory(Object obj)
    {
        Class cls = obj.getClass();
        return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new BusinessImplProxy(obj));
    }
}
//測試類
public class DynamicProxy
{   
    public static void main(String[] args) throws Throwable
    {
        BusinessFooImpl bfoo = new BusinessFooImpl();
        BusinessFoo bf = (BusinessFoo)BusinessImplProxy.factory(bfoo);
        bf.foo();
        System.out.println();

        BusinessBarImpl bbar = new BusinessBarImpl();
        BusinessBar bb = (BusinessBar)BusinessImplProxy.factory(bbar);
        String message = bb.bar("Hello,World");
        System.out.println(message);
    }
}

程序流程說明:
new BusinessFooImpl();創建一個“真實角色”,傳遞給工廠方法BusinessImplProxy.factory(),進而初始化“調用處理器”――即實現InvocationHandler的類。并返回一個動態創建的代理類實例,由于“代理角色”也必然實現了“抽象角色”提供的業務邏輯方法,故可向下轉型為BusinessBar,并賦值給指向BusinessBar類型的引用bb。
newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)方法由程序員來指定參數動態返回需要的代理類,而invoke(Object proxy, Method method, Object[] args) 方法則是由JVM在運行時動態調用的。當執行“bb.bar("Hello,World");”方法時,JVM動態指派“調用處理器”,向外層invoke傳遞參數,并調用method.invoke(obj,args)真正執行!

BusinessImplProxy.Factory靜態方法用來動態生成代理類(“代理角色”),在運行時根據不同的業務邏輯接口BusinessFoo和BusinessBar,在運行時分別動態生成了代理角色?!俺橄蠼巧?、“代理角色”以及調用處理器(實現InvocationHandler接口的類)這三者都可以改變,所以說JAVA的動態代理十分強大。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品一区二区三区在线播放视频| 91色视频在线观看| 亚洲视频axxx| 国内精品免费午夜毛片| 精品国产91久久久久久| 国产免费一区二区三区在线能观看| 亚洲在线免费看| 国产精品aaaa| 日本欧美精品在线| 欧美乱人伦中文字幕在线| 欧美黄色小视频| 55夜色66夜色国产精品视频| 中文字幕亚洲一区在线观看| 最近2019中文字幕第三页视频| 国产伦精品免费视频| 亚洲国产精品yw在线观看| 亚洲欧美日韩一区在线| 欧美激情一二区| www.亚洲免费视频| 日韩av电影院| 久久电影一区二区| 91在线免费看网站| 亚洲跨种族黑人xxx| 中文字幕日韩在线播放| 久久青草福利网站| 2018中文字幕一区二区三区| 亚洲直播在线一区| 在线视频欧美性高潮| 一区二区日韩精品| 俺去啦;欧美日韩| 成人黄色激情网| 日韩av色综合| 日韩av在线导航| 中文字幕久久亚洲| 欧美日韩国产成人高清视频| 欧美日韩精品在线| 亚洲第五色综合网| xxav国产精品美女主播| 国产精品色视频| 亚洲码在线观看| 欧美成人精品在线播放| 亚洲男子天堂网| 亚洲第一男人av| 亚洲理论电影网| 国产精品美女无圣光视频| 中文字幕亚洲无线码在线一区| 欧美日本精品在线| 国产日韩欧美日韩大片| www.欧美视频| 国产成人在线视频| 国产日韩欧美黄色| 亚洲欧美国产一区二区三区| 欧美一区二粉嫩精品国产一线天| 久久久久久免费精品| 日韩精品日韩在线观看| 亚洲天堂网站在线观看视频| 欧美激情在线观看| 日韩精品在线视频美女| 精品欧美aⅴ在线网站| 国产69精品久久久久久| 91久久夜色精品国产网站| 一本色道久久88综合日韩精品| 精品国产乱码久久久久久婷婷| 国外成人在线直播| 日韩精品极品在线观看播放免费视频| 午夜精品久久久久久久99黑人| 久久精品影视伊人网| 亚洲欧美国产va在线影院| 成人黄色免费网站在线观看| 亚洲一区av在线播放| 精品伊人久久97| 久久久久五月天| 久久精品国产亚洲7777| 亚洲国产成人av在线| xxx成人少妇69| 午夜精品久久久久久久男人的天堂| 91国在线精品国内播放| 亚洲视频综合网| 久久久精品欧美| 欧美大片大片在线播放| 国产欧美一区二区三区视频| 超薄丝袜一区二区| 成人免费视频a| 亚洲高清av在线| 成人在线中文字幕| 亚洲一二三在线| 欧美成人高清视频| 国产一区二区三区在线看| 国产欧美日韩中文| 亚洲日韩欧美视频一区| 欧美激情网站在线观看| 538国产精品一区二区在线| 亚洲精品自拍第一页| 亚洲精品综合久久中文字幕| 韩剧1988免费观看全集| 国产最新精品视频| 中日韩美女免费视频网站在线观看| 在线看片第一页欧美| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久久精品一区| 精品少妇一区二区30p| 三级精品视频久久久久| 国产精品极品美女在线观看免费| 亚洲一区二区久久| 色婷婷综合久久久久中文字幕1| 91国语精品自产拍在线观看性色| 国产欧美一区二区白浆黑人| 国产精品女人网站| 97视频在线播放| 国产美女久久久| 国产精品白丝jk喷水视频一区| 精品亚洲夜色av98在线观看| 国产噜噜噜噜噜久久久久久久久| 欧美三级xxx| 亚洲一区999| 欧美裸身视频免费观看| 欧美在线日韩在线| 成人网在线观看| 日韩一级黄色av| 91青草视频久久| 欧美诱惑福利视频| 69视频在线播放| 亚洲一区第一页| 日韩av影院在线观看| 日韩在线观看免费全| 亚洲97在线观看| 国内精品久久久久伊人av| 久久国产精品久久久久久久久久| 丝袜亚洲另类欧美重口| 久久精品人人爽| 色黄久久久久久| 久久理论片午夜琪琪电影网| 热99在线视频| 欧美激情一级欧美精品| 欧美日韩亚洲成人| 国产成人精品在线播放| 国产大片精品免费永久看nba| 热久久美女精品天天吊色| 成人有码在线视频| 国模精品视频一区二区三区| 国模精品视频一区二区三区| 成人免费视频xnxx.com| 日韩va亚洲va欧洲va国产| 国内揄拍国内精品少妇国语| 日韩av中文字幕在线免费观看| 久久影视电视剧免费网站清宫辞电视| 亚洲精品自在久久| 亚洲欧美色图片| 日韩一区二区三区在线播放| 国产一区二区三区18| 亚洲成人激情在线| 久久影院在线观看| 欧美日韩免费观看中文| 亚洲免费伊人电影在线观看av| 欧美精品激情在线| 日本精品久久电影| 国产精品久久久久久久一区探花| 狠狠躁夜夜躁人人躁婷婷91| 中文字幕免费国产精品| 91亚洲精品久久久久久久久久久久| 伊人久久久久久久久久久久久| 午夜精品国产精品大乳美女| 久久亚洲春色中文字幕| 中文字幕日韩在线视频|