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

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

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

    隨筆-31  評(píng)論-2  文章-0  trackbacks-0
      Proxy代理模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,主要解決的問題是:在直接訪問對(duì)象時(shí)帶來的問題,比如說:要訪問的對(duì)象在遠(yuǎn)程的機(jī)器上。在面向?qū)ο笙到y(tǒng)中,有些對(duì)象由于某些原因(比如對(duì)象創(chuàng)建開銷很大,或者某些操作需要安全控制,或者需要進(jìn)程外的訪問),直接訪問會(huì)給使用者或者系統(tǒng)結(jié)構(gòu)帶來很多麻煩,我們可以在訪問此對(duì)象時(shí)加上一個(gè)對(duì)此對(duì)象的訪問層。如下圖:
       



           比如說C和A不在一個(gè)服務(wù)器上,A要頻繁的調(diào)用C,我們可以在A上做一個(gè)代理類Proxy,把訪問C的工作交給Proxy,這樣對(duì)于A來說,就好像在直接訪問C的對(duì)象。在對(duì)A的開發(fā)中我們可以把注意力完全放在業(yè)務(wù)的實(shí)現(xiàn)上。

           GoF《設(shè)計(jì)模式》中說道:為其他對(duì)象提供一種代理以控制這個(gè)對(duì)象的訪問。

           Proxy模式的結(jié)構(gòu):
       



           下面通過一個(gè)場(chǎng)景來看看Proxy的實(shí)現(xiàn),我們要使用代理類型ProxyClass的對(duì)象調(diào)用遠(yuǎn)程機(jī)器上的一個(gè)類型LongDistanceClass的對(duì)象。

        首先我們先模擬一個(gè)遠(yuǎn)程的類型:為了保持對(duì)被代理對(duì)象使用的透明性,我們使代理類型和被代理類型同時(shí)繼承同一個(gè)接口IProxy

        接口實(shí)現(xiàn):

        interface IProxy

        {

            string Function1();

            string Function2();

        }

        遠(yuǎn)程對(duì)象實(shí)現(xiàn):

        /// <summary>

        /// 模擬的遠(yuǎn)程對(duì)象

        /// </summary>

        public class LongDistanceClass:IProxy

        {

            #region IProxy 成員

            public string Function1()

            {

                //do someting

                return "LongDistanceClass.Function1";

            }

            public string Function2()

            {

                //do someting

                return "LongDistanceClass.Function2";

            }

            #endregion

        }

        接下來就要實(shí)現(xiàn)代理類型,使用代理對(duì)象訪問模擬的遠(yuǎn)程對(duì)象,代理類型實(shí)現(xiàn)如下:

        public class ProxyClass:IProxy

        {

            #region IProxy 成員

            public string Function1()

            {

                //to access LongDistanceClass.Function1

                LongDistanceClass obj = new LongDistanceClass();

                return obj.Function1();

            }

            public string Function2()

            {

                //to access LongDistanceClass.Function2

                LongDistanceClass obj = new LongDistanceClass();

                return obj.Function2();

            }

            #endregion

        }

     

        最后實(shí)現(xiàn)客戶端代碼:

        class Class1

        {

            [STAThread]

            static void Main(string[] args)

            {

                IProxy pro = new ProxyClass();

                Console.WriteLine(pro.Function1());

                Console.WriteLine(pro.Function2());

                Console.Read();

            }

        }

        運(yùn)行結(jié)果如下:

        LongDistanceClass.Function1

    LongDistanceClass.Function2

           Proxy模式的要點(diǎn):

           1、“增加一層間接層”是軟件系統(tǒng)中對(duì)許多負(fù)責(zé)問題的一種常見解決方法。在面向?qū)ο笙到y(tǒng)中,直接使用某些對(duì)象會(huì)帶來很多問題,作為間接層的proxy對(duì)象便是解決這一問題的常用手段。

           在我們?nèi)粘5墓ぷ髦幸渤3S玫酱砟J剑热鐚?duì)于三層結(jié)構(gòu)或者N- tiers結(jié)構(gòu)中DAL數(shù)據(jù)訪問層,它把對(duì)數(shù)據(jù)庫(kù)的訪問進(jìn)行封裝。BLL業(yè)務(wù)層的開發(fā)者只是調(diào)用DAL中的方法來獲得數(shù)據(jù)。

           在比如前一段時(shí)間看了看AOP和Remoting方面的資料,對(duì)于跨越應(yīng)用程序域的訪問,要為客戶應(yīng)用程序提供一個(gè)TransparentProxy(透明代理),客戶程序?qū)嶋H上是通過訪問這個(gè)代理來訪問實(shí)際的類型對(duì)象。

    2、具體proxy設(shè)計(jì)模式的實(shí)現(xiàn)方法、實(shí)現(xiàn)粒度都相差很大,有些可能對(duì)單個(gè)對(duì)象作細(xì)粒度的控制,有些可能對(duì)組件模塊提供抽象代理層,在架構(gòu)層次對(duì)對(duì)象作proxy。

    3、proxy并不一定要求保持接口的一致性,只要能夠?qū)崿F(xiàn)間接控制,有時(shí)候損及一些透明性是可以接受的。例如上面的那個(gè)例子,代理類型ProxyClass和被代理類型LongDistanceClass可以不用繼承自同一個(gè)接口,正像GoF《設(shè)計(jì)模式》中說的:為其他對(duì)象提供一種代理以控制這個(gè)對(duì)象的訪問。代理類型從某種角度上講也可以起到控制被代理類型的訪問的作用。
    posted on 2009-08-04 14:44 xiaoxinchen 閱讀(149) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 91亚洲精品麻豆| 久久亚洲AV午夜福利精品一区| 亚洲欧洲精品久久| 最新亚洲成av人免费看| 免费大黄网站在线观| 国产精品亚洲а∨无码播放不卡| 成人人免费夜夜视频观看| 亚洲无mate20pro麻豆| 天天摸天天操免费播放小视频 | 亚洲人成网77777亚洲色 | 亚洲第一第二第三第四第五第六| 国产成人A在线观看视频免费| 亚洲天堂2017无码中文| 全免费a级毛片免费看不卡| 亚洲a∨国产av综合av下载| 国产婷婷高清在线观看免费| 亚洲欧美熟妇综合久久久久| 国产乱人免费视频| 免费无毒a网站在线观看| 国产亚洲精午夜久久久久久| 男人的天堂网免费网站| 亚洲啪啪免费视频| 国产麻豆剧传媒精品国产免费| 日日摸夜夜添夜夜免费视频| 国产V亚洲V天堂无码| 最近2019年免费中文字幕高清| 亚洲娇小性xxxx| 亚洲不卡AV影片在线播放| 青柠影视在线观看免费高清| 亚洲综合视频在线| 免费的涩涩视频在线播放| 9久热精品免费观看视频| 久久精品国产亚洲AV嫖农村妇女| 免费看的一级毛片| a级黄色毛片免费播放视频| 亚洲成人黄色在线观看| 亚洲成A人片在线观看无码3D| 99精品免费观看| 色偷偷亚洲男人天堂| 亚洲AV成人精品网站在线播放 | 成人a毛片视频免费看|