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

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

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

    posts - 262,  comments - 221,  trackbacks - 0

    本文的例子和部分內容均來自www.jdon.com的《GoF 23種設計模式》系列文章

     一、Proxy模式的適用場合

    1.授權機制

    不同級別的用戶對同一對象擁有不同的訪問權利,如Jive論壇系統中,就使用Proxy進行授權機制控制,訪問論壇有兩種人:注冊用戶和游客(未注冊用戶),Jive中就通過類似ForumProxy這樣的代理來控制這兩種用戶對論壇的訪問權限.

    2.某個客戶端不能直接操作到某個對象,但又必須和那個對象有所互動.

    舉例兩個具體情況:
    (1)如果那個對象是一個是很大的圖片,需要花費很長時間才能顯示出來,那么當這個圖片包含在文檔中時,使用編輯器或瀏覽器打開這個文檔,打開文檔必須很迅速,不能等待大圖片處理完成,這時需要做個圖片Proxy來代替真正的圖片.

    (2)如果那個對象在Internet的某個遠端服務器上,直接操作這個對象因為網絡速度原因可能比較慢,那我們可以先用Proxy來代替那個對象.

    --摘自Jdon的《GoF 23種設計模式》


    二、使用Proxy模式實現的授權機制


    個人觀點


    從isSystemOrForumAdmin()方法體中我們可以看到權限設計的一種方法:

    ·定義一個表示權限的類,在這個類中定義所有的權限條目(例如這里的FORUM_ADMIN),以數字表示

    ·在這個類中定義一個數組,用于表示一個用戶所具有的所有權限的集合,數組的長度就是所有權限的數目總和

    ·使用諸如values[FORM_ADMIN]來獲取用戶是否具有某一項權限



    三、對Jive論壇中Proxy模式使用的理解







    個人觀點二
    Request --(1)--> ForumProxy --(2)--> ForumPermissions 
                                  |                                   |
                                  | <-----------(3)-------   | (權限驗證通過)
                                  |                                   | 
                          (訪問)|  ----------- (4)------>   | Form

    從上面的代碼段和這個流程圖中我們可以看到Proxy模式實現權限驗證的過程:

    ·請求都必須先經過Proxy
    ·Proxy類中包含了一個Permission類,用于獲取當前用戶所具有的權限
    ·Proxy類根據用戶的權限將請求轉發給真正的后臺對象或拒絕請求

    Proxy類具有幾個特點

    ·Proxy類一般都實現或繼承了后臺對象接口或抽象類,在其中實現了后臺對象接口的方法,這樣外界和代理類打交道的客戶端看到的是和后臺對象一樣的接口。根本不知道自在和代理對象打交道。

    ·Proxy類一般都含有一個后臺對象作為其成員,因為代理類需要在其實現接口的方法中調用后臺對象的真正方法來實現業務邏輯。

    ·Proxy類一般都需要包含一個能夠驗證用戶請求是否合法的對象,如上例中的ForumPermisssions類,作為轉發或拒絕用戶請求的判斷依據



    四、Jive論壇中Proxy模式與Factory模式的結合




    個人觀點三
    Proxy結合Factory模式的實現流程

    Request --(1)-- > ForumFactoryProxy --(2)-- > FourmPermissions
                                    |                                            |
                                    | <----------- (3) -------------  | (驗證通過) 
                    |                                            |
                                    | ------------- (4) ----------->  | ForumFactory
                                    |                                            | 
                          Forum | <------------ (5) ------------ | (創建)
                                    |                                            |
                           (封裝) | ------------- (6) ----------->  | ForumProxy


    可以看到這里有2個Proxy對象,一個是工廠的Proxy,一個是產品的Proxy,前者決定用戶是否有權創建一個Forum,后者決定用戶是否有權使用Forum。

    但工廠創建出一個Form對象后,就將這個Forum對象和其它的對象傳給ForumProxy對象,以后所有對Forum的訪問和操作都由ForumProxy來代理。(參見個人觀點二)

    所以我們看到:假如我們不想讓用戶直接訪問后臺對象或需要設置不同的訪問、操作權限,我們就可以使用Proxy模式


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-01-14 17:40 Paul Lin 閱讀(1518) 評論(0)  編輯  收藏 所屬分類: 模式與重構
    <2008年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲沟沟美女亚洲沟沟| 亚洲国产精品无码久久一线| 亚洲精品无码久久久久久久| 巨胸喷奶水视频www免费视频| 亚洲乱码中文字幕手机在线 | 亚洲Av永久无码精品黑人| 亚洲精品免费网站| 亚洲资源最新版在线观看| 日韩视频在线精品视频免费观看 | 免费视频一区二区| 亚洲av成人无码久久精品| 免费二级毛片免费完整视频| 亚洲av无码一区二区三区人妖| 国产网站免费观看| 久久伊人久久亚洲综合| 99爱在线观看免费完整版| 亚洲成a人片在线观| 成人黄页网站免费观看大全| 亚洲av无码无线在线观看| 亚洲Av无码乱码在线播放| a级毛片毛片免费观看久潮喷| 久久久久无码精品亚洲日韩| 国产男女爽爽爽爽爽免费视频| 亚洲国产精品碰碰| 大地资源在线资源免费观看| 久久精品亚洲中文字幕无码麻豆 | 亚洲av永久无码精品古装片 | 最近中文字幕大全免费版在线| 亚洲AV无码专区亚洲AV伊甸园| 97在线视频免费公开观看| 亚洲熟妇AV日韩熟妇在线| yy6080亚洲一级理论| 免费视频一区二区| 亚洲午夜无码毛片av久久京东热| 免费人成在线观看播放国产| 成全视频免费观看在线看| 91亚洲视频在线观看| 亚洲国产精品成人网址天堂| 亚洲一区免费观看| 国产成人亚洲毛片| 久久久久久久亚洲Av无码|