<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

    本文的例子和部分內(nèi)容均來(lái)自www.jdon.com的《GoF 23種設(shè)計(jì)模式》系列文章

     一、Proxy模式的適用場(chǎng)合

    1.授權(quán)機(jī)制

    不同級(jí)別的用戶對(duì)同一對(duì)象擁有不同的訪問(wèn)權(quán)利,如Jive論壇系統(tǒng)中,就使用Proxy進(jìn)行授權(quán)機(jī)制控制,訪問(wèn)論壇有兩種人:注冊(cè)用戶和游客(未注冊(cè)用戶),Jive中就通過(guò)類似ForumProxy這樣的代理來(lái)控制這兩種用戶對(duì)論壇的訪問(wèn)權(quán)限.

    2.某個(gè)客戶端不能直接操作到某個(gè)對(duì)象,但又必須和那個(gè)對(duì)象有所互動(dòng).

    舉例兩個(gè)具體情況:
    (1)如果那個(gè)對(duì)象是一個(gè)是很大的圖片,需要花費(fèi)很長(zhǎng)時(shí)間才能顯示出來(lái),那么當(dāng)這個(gè)圖片包含在文檔中時(shí),使用編輯器或?yàn)g覽器打開這個(gè)文檔,打開文檔必須很迅速,不能等待大圖片處理完成,這時(shí)需要做個(gè)圖片Proxy來(lái)代替真正的圖片.

    (2)如果那個(gè)對(duì)象在Internet的某個(gè)遠(yuǎn)端服務(wù)器上,直接操作這個(gè)對(duì)象因?yàn)榫W(wǎng)絡(luò)速度原因可能比較慢,那我們可以先用Proxy來(lái)代替那個(gè)對(duì)象.

    --摘自Jdon的《GoF 23種設(shè)計(jì)模式》


    二、使用Proxy模式實(shí)現(xiàn)的授權(quán)機(jī)制


    個(gè)人觀點(diǎn)


    從isSystemOrForumAdmin()方法體中我們可以看到權(quán)限設(shè)計(jì)的一種方法:

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

    ·在這個(gè)類中定義一個(gè)數(shù)組,用于表示一個(gè)用戶所具有的所有權(quán)限的集合,數(shù)組的長(zhǎng)度就是所有權(quán)限的數(shù)目總和

    ·使用諸如values[FORM_ADMIN]來(lái)獲取用戶是否具有某一項(xiàng)權(quán)限



    三、對(duì)Jive論壇中Proxy模式使用的理解







    個(gè)人觀點(diǎn)二
    Request --(1)--> ForumProxy --(2)--> ForumPermissions 
                                  |                                   |
                                  | <-----------(3)-------   | (權(quán)限驗(yàn)證通過(guò))
                                  |                                   | 
                          (訪問(wèn))|  ----------- (4)------>   | Form

    從上面的代碼段和這個(gè)流程圖中我們可以看到Proxy模式實(shí)現(xiàn)權(quán)限驗(yàn)證的過(guò)程:

    ·請(qǐng)求都必須先經(jīng)過(guò)Proxy
    ·Proxy類中包含了一個(gè)Permission類,用于獲取當(dāng)前用戶所具有的權(quán)限
    ·Proxy類根據(jù)用戶的權(quán)限將請(qǐng)求轉(zhuǎn)發(fā)給真正的后臺(tái)對(duì)象或拒絕請(qǐng)求

    Proxy類具有幾個(gè)特點(diǎn)

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

    ·Proxy類一般都含有一個(gè)后臺(tái)對(duì)象作為其成員,因?yàn)榇眍愋枰谄鋵?shí)現(xiàn)接口的方法中調(diào)用后臺(tái)對(duì)象的真正方法來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯。

    ·Proxy類一般都需要包含一個(gè)能夠驗(yàn)證用戶請(qǐng)求是否合法的對(duì)象,如上例中的ForumPermisssions類,作為轉(zhuǎn)發(fā)或拒絕用戶請(qǐng)求的判斷依據(jù)



    四、Jive論壇中Proxy模式與Factory模式的結(jié)合




    個(gè)人觀點(diǎn)三
    Proxy結(jié)合Factory模式的實(shí)現(xiàn)流程

    Request --(1)-- > ForumFactoryProxy --(2)-- > FourmPermissions
                                    |                                            |
                                    | <----------- (3) -------------  | (驗(yàn)證通過(guò)) 
                    |                                            |
                                    | ------------- (4) ----------->  | ForumFactory
                                    |                                            | 
                          Forum | <------------ (5) ------------ | (創(chuàng)建)
                                    |                                            |
                           (封裝) | ------------- (6) ----------->  | ForumProxy


    可以看到這里有2個(gè)Proxy對(duì)象,一個(gè)是工廠的Proxy,一個(gè)是產(chǎn)品的Proxy,前者決定用戶是否有權(quán)創(chuàng)建一個(gè)Forum,后者決定用戶是否有權(quán)使用Forum。

    但工廠創(chuàng)建出一個(gè)Form對(duì)象后,就將這個(gè)Forum對(duì)象和其它的對(duì)象傳給ForumProxy對(duì)象,以后所有對(duì)Forum的訪問(wèn)和操作都由ForumProxy來(lái)代理。(參見個(gè)人觀點(diǎn)二)

    所以我們看到:假如我們不想讓用戶直接訪問(wèn)后臺(tái)對(duì)象或需要設(shè)置不同的訪問(wèn)、操作權(quán)限,我們就可以使用Proxy模式


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

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 曰曰鲁夜夜免费播放视频| 久久一区二区三区免费播放| 最近免费中文字幕大全| 亚洲日韩乱码中文无码蜜桃| 91热久久免费精品99| 久久久婷婷五月亚洲97号色 | 亚洲成a∧人片在线观看无码| 四虎永久在线观看免费网站网址 | 亚洲一级免费毛片| h视频在线观看免费网站| 亚洲理论片中文字幕电影| 国产免费丝袜调教视频| 亚洲国产理论片在线播放| 久久精品无码一区二区三区免费| 亚洲男人的天堂久久精品| 好吊妞视频免费视频| 国产精品无码亚洲一区二区三区| 国产成人免费a在线视频色戒| 一进一出60分钟免费视频| 亚洲乱色熟女一区二区三区丝袜| 久久免费观看国产精品| 亚洲欧洲日韩国产| 在线观看永久免费视频网站| 免费无码午夜福利片69| 国产精品国产亚洲精品看不卡| 最近2019免费中文字幕6| 亚洲精品无码久久久久APP | 四虎国产精品永久免费网址| 亚洲AV无码专区在线亚| 国产一级理论免费版| 久久99免费视频| 2020天堂在线亚洲精品专区| 亚洲av区一区二区三| 一级毛片aaaaaa免费看| 亚洲色大成网站WWW国产| 久久99亚洲综合精品首页| 蜜桃AV无码免费看永久| 免费播放国产性色生活片| 激情内射亚洲一区二区三区| 国产免费黄色大片| 免费精品无码AV片在线观看|