<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 73,  comments - 55,  trackbacks - 0

    設計模式中定義: 為其他對象提供一種代理以控制對這個對象的訪問.

    為什么要使用Proxy?
    1.授權機制

    我們開發一個應用系統時,用戶請求任何頁面都要經過權限控制,最早開發的時候我們常常封裝一個權限驗證方法,然后在每個jsp或者對應的servlet中增加相關代碼,但是用戶對權限的需求往往是多變的,這樣一旦權限驗證方法變化(參數變化,增加方法),如果開發的系統很龐大的話,有可能你就需要修改幾百個jsp頁面或者servlet代碼。
    還有我們常需要判斷session是否過期,如果過期就要重新登陸系統,如果每個頁面或者servlet都要加判斷代碼,那也是件比較痛苦的事情。
    如果我們采用代理模式,增加Proxy對象,每次用戶請求必須通過proxy對象處理,由它專門處理相關權限控制,一旦權限需求變化了,只需要修改Proxy對象相關的實現方法。

    2.某個客戶端不能直接操作到某個對象,但又必須和那個對象有所互動.
    舉例4個具體情況:
    u 一個對象,比如一幅很大的圖像,需要載入的時間很長。

    u 一個需要很長時間才可以完成的計算結果,并且需要在它計算過程中顯示中間結果

    u 一個存在于遠程計算機上的對象,需要通過網絡載入這個遠程對象則需要很長時間,特別是在網絡傳輸高峰期。

    u 一個對象只有有限的訪問權限,代理模式(Proxy)可以驗證用戶的權限


    總之原則是,對于開銷很大的對象,只有在使用它時才創建,這個原則可以為我們節省很多寶貴的Java內存. 所以,有些人認為Java耗費資源內存,我以為這和程序編制思路也有一定的關系.


    簡單實例:
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;

    interface AnInterface {
    ?public void doSomething();
    }

    class AClass implements AnInterface {
    ?public void doSomething() {
    ??System.out.println("Inside Method AClass.doSomething()");
    ?}
    }

    class SimpleInvocationHandler implements InvocationHandler {
    ?public SimpleInvocationHandler(Object realSubject) {
    ??this.realSubject = realSubject;
    ?}

    ?public Object invoke(Object proxy, Method m, Object[] args) {
    ??Object result = null;
    ??System.out.println("Before Calling " + m.getName());
    ??try {
    ???result = m.invoke(realSubject, args);
    ??} catch (Exception ex) {
    ???System.exit(1);
    ??}
    ??System.out.println("After Calling " + m.getName());
    ??return result;
    ?}

    ?private Object realSubject = null;
    }

    public class Test {
    ?public static void main(String args[]) {
    ??AnInterface realSubject = new AClass();
    ??AnInterface proxy = (AnInterface) Proxy.newProxyInstance(realSubject
    ????.getClass().getClassLoader(), realSubject.getClass()
    ????.getInterfaces(), new SimpleInvocationHandler(realSubject));
    ??passMeAProxy(proxy);
    ?}

    ?private static void passMeAProxy(AnInterface anInterface) {
    ??anInterface.doSomething();
    ?}
    }

    posted on 2006-07-25 14:28 保爾任 閱讀(584) 評論(1)  編輯  收藏 所屬分類: Design Patten

    FeedBack:
    # re: Proxy(代理)模式
    2007-11-08 20:57 | 李欽欽
    今天謝謝你的幫助.祝你好運  回復  更多評論
      

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线观看免费精品国产| 91精品国产免费入口| 日韩免费观看视频| 亚洲中文字幕久久精品无码2021| 暖暖免费日本在线中文| 久久精品视频亚洲| 无码精品国产一区二区三区免费| 国产V亚洲V天堂A无码| 久久精品电影免费动漫| 色婷婷六月亚洲婷婷丁香| 未满十八18禁止免费无码网站 | 亚洲性猛交XXXX| 国产在线观a免费观看| 久久综合九九亚洲一区| 99视频在线精品免费| 亚洲入口无毒网址你懂的| 嫩草影院在线免费观看| 国产成人高清亚洲一区91| 在线精品亚洲一区二区三区| 久久国产精品免费视频| 亚洲伊人久久大香线蕉| 曰皮全部过程视频免费国产30分钟| 亚洲砖码砖专无区2023| 亚洲国产一级在线观看| 人人揉揉香蕉大免费不卡| 亚洲乱码一二三四区国产| 四虎影在线永久免费四虎地址8848aa| 中文字幕在线免费观看视频| 亚洲男人第一av网站| 精品免费久久久久久成人影院| 羞羞视频免费网站含羞草| 亚洲妇熟XXXX妇色黄| 天天天欲色欲色WWW免费| 一本岛v免费不卡一二三区| 久久久无码精品亚洲日韩京东传媒| 最近2019中文字幕免费看最新| 高潮毛片无遮挡高清免费视频 | 日韩精品一区二区亚洲AV观看| 无码国产精品久久一区免费| 永久免费无码网站在线观看个| 亚洲精品国产肉丝袜久久|