• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            模式設(shè)計(jì)c#--結(jié)構(gòu)型--proxy

            名稱 Proxy
            結(jié)構(gòu) o_proxy.bmp
            意圖 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。
            適用性
            • 在需要用比較通用和復(fù)雜的對(duì)象指針代替簡單的指針的時(shí)候,使用P r o x y 模式。下面是一 些可以使用P r o x y 模式常見情況:
              1) 遠(yuǎn)程代理(Remote Proxy )為一個(gè)對(duì)象在不同的地址空間提供局部代表。 NEXTSTEP[Add94] 使用N X P r o x y 類實(shí)現(xiàn)了這一目的。Coplien[Cop92] 稱這種代理為“大使” (A m b a s s a d o r )。
              2 )虛代理(Virtual Proxy )根據(jù)需要?jiǎng)?chuàng)建開銷很大的對(duì)象。在動(dòng)機(jī)一節(jié)描述的I m a g e P r o x y 就是這樣一種代理的例子。
              3) 保護(hù)代理(Protection Proxy )控制對(duì)原始對(duì)象的訪問。保護(hù)代理用于對(duì)象應(yīng)該有不同 的訪問權(quán)限的時(shí)候。例如,在C h o i c e s 操作系統(tǒng)[ C I R M 9 3 ]中K e m e l P r o x i e s 為操作系統(tǒng)對(duì)象提供 了訪問保護(hù)。
              4 )智能指引(Smart Reference )取代了簡單的指針,它在訪問對(duì)象時(shí)執(zhí)行一些附加操作。 它的典型用途包括:
            • 對(duì)指向?qū)嶋H對(duì)象的引用計(jì)數(shù),這樣當(dāng)該對(duì)象沒有引用時(shí),可以自動(dòng)釋放它(也稱為S m a r tP o i n t e r s[ E d e 9 2 ] )。
            • 當(dāng)?shù)谝淮我靡粋€(gè)持久對(duì)象時(shí),將它裝入內(nèi)存。
            • 在訪問一個(gè)實(shí)際對(duì)象前,檢查是否已經(jīng)鎖定了它,以確保其他對(duì)象不能改變它。

            Code Example
            namespace?Proxy_DesignPattern
            {
            ????
            using?System;
            ????
            using?System.Threading;

            ????
            ///?<summary>
            ????
            ///????Summary?description?for?Client.
            ????
            ///?</summary>

            ????abstract?class?CommonSubject?
            ????
            {
            ????????
            abstract?public?void?Request();????????
            ????}


            ????
            class?ActualSubject?:?CommonSubject
            ????
            {
            ????????
            public?ActualSubject()
            ????????
            {
            ????????????
            //?Assume?constructor?here?does?some?operation?that?takes?quite?a
            ????????????
            //?while?-?hence?the?need?for?a?proxy?-?to?delay?incurring?this?
            ????????????
            //?delay?until?(and?if)?the?actual?subject?is?needed
            ????????????Console.WriteLine("Starting?to?construct?ActualSubject");????????
            ????????????Thread.Sleep(
            1000);?//?represents?lots?of?processing!?
            ????????????Console.WriteLine("Finished?constructing?ActualSubject");
            ????????}

            ????????????
            ????????????
            override?public?void?Request()
            ????????
            {
            ????????????Console.WriteLine(
            "Executing?request?in?ActualSubject");
            ????????}

            ????}


            ????
            class?Proxy?:?CommonSubject
            ????
            {
            ????????ActualSubject?actualSubject;

            ????????
            override?public?void?Request()
            ????????
            {
            ????????????
            if?(actualSubject?==?null)
            ????????????????actualSubject?
            =?new?ActualSubject();
            ????????????actualSubject.Request();
            ????????}
            ????
            ????????
            ????}

            ????
            ????
            public?class?Client
            ????
            {
            ????????
            public?static?int?Main(string[]?args)
            ????????
            {
            ????????????Proxy?p?
            =?new?Proxy();

            ????????????
            //?Perform?actions?here
            ????????????
            //?.?.?.?

            ????????????
            if?(1==1)????????//?at?some?later?point,?based?on?a?condition,?
            ????????????????p.Request();//?we?determine?if?we?need?to?use?subject
            ????????????????????????????????
            ????????????
            return?0;
            ????????}

            ????}

            }


            //?Proxy?pattern?--?Real?World?example??


            using?System;

            namespace?DoFactory.GangOfFour.Proxy.RealWorld
            {
            ??
            ??
            //?Mainapp?test?application?

            ??
            class?MainApp
            ??
            {
            ????
            static?void?Main()
            ????
            {
            ??????
            //?Create?math?proxy?
            ??????MathProxy?p?=?new?MathProxy();

            ??????
            //?Do?the?math?
            ??????Console.WriteLine("4?+?2?=?"?+?p.Add(4,?2));
            ??????Console.WriteLine(
            "4?-?2?=?"?+?p.Sub(4,?2));
            ??????Console.WriteLine(
            "4?*?2?=?"?+?p.Mul(4,?2));
            ??????Console.WriteLine(
            "4?/?2?=?"?+?p.Div(4,?2));

            ??????
            //?Wait?for?user?
            ??????Console.Read();
            ????}

            ??}


            ??
            //?"Subject"?

            ??
            public?interface?IMath
            ??
            {
            ????
            double?Add(double?x,?double?y);
            ????
            double?Sub(double?x,?double?y);
            ????
            double?Mul(double?x,?double?y);
            ????
            double?Div(double?x,?double?y);
            ??}


            ??
            //?"RealSubject"?

            ??
            class?Math?:?IMath
            ??
            {
            ????
            public?double?Add(double?x,?double?y){return?x?+?y;}
            ????
            public?double?Sub(double?x,?double?y){return?x?-?y;}
            ????
            public?double?Mul(double?x,?double?y){return?x?*?y;}
            ????
            public?double?Div(double?x,?double?y){return?x?/?y;}
            ??}


            ??
            //?"Proxy?Object"?

            ??
            class?MathProxy?:?IMath
            ??
            {
            ????Math?math;

            ????
            public?MathProxy()
            ????
            {
            ??????math?
            =?new?Math();
            ????}


            ????
            public?double?Add(double?x,?double?y)
            ????
            {?
            ??????
            return?math.Add(x,y);?
            ????}

            ????
            public?double?Sub(double?x,?double?y)
            ????
            {?
            ??????
            return?math.Sub(x,y);?
            ????}

            ????
            public?double?Mul(double?x,?double?y)
            ????
            {?
            ??????
            return?math.Mul(x,y);?
            ????}

            ????
            public?double?Div(double?x,?double?y)
            ????
            {?
            ??????
            return?math.Div(x,y);?
            ????}

            ??}

            }

            ?

            posted on 2006-01-03 15:51 夢(mèng)在天涯 閱讀(935) 評(píng)論(2)  編輯 收藏 引用 所屬分類: Design pattern

            評(píng)論

            # re: 模式設(shè)計(jì)c#--結(jié)構(gòu)型--proxy 2006-04-24 16:05 夢(mèng)在天涯

            好像和裝飾(Decorator)模式差不多啊?

            到底有什么不同啊?  回復(fù)  更多評(píng)論   

            # re: 模式設(shè)計(jì)c#--結(jié)構(gòu)型--proxy 2006-04-24 16:05 夢(mèng)在天涯

            我想Proxy與Adapter還是有區(qū)別的。因?yàn)镻roxy中的代理和被代理對(duì)象是“同根生”,這樣才可以代理。Adapter中的Adapter與Adaptee不用“同根生”。我把Proxy稱作“票販子的模式”,而Adapter是“倒賣外匯的模式”。票販子販的是票,在販賣的過程中,票沒有變化,只是被代理了。而Adapter模式中,外匯可能由人民幣變做了美元,東西變了(呵呵,換湯不換藥,都是鈔票)。  回復(fù)  更多評(píng)論   

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1807503
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            色婷婷综合久久久久中文| 精品久久久中文字幕人妻| 久久久91精品国产一区二区三区| 久久精品无码专区免费东京热| 国产美女久久精品香蕉69| 国产精品久久国产精品99盘 | 热久久国产欧美一区二区精品 | 国产成人久久精品区一区二区| 久久高清一级毛片| 久久丫精品国产亚洲av| 久久久久九国产精品| 久久天天躁狠狠躁夜夜躁2O2O| 久久99精品国产麻豆蜜芽| 久久香综合精品久久伊人| 思思久久好好热精品国产| 精品久久久久久久久中文字幕| 久久人人爽人人人人片av| 99久久精品国产一区二区三区| 人妻少妇久久中文字幕| 无码人妻少妇久久中文字幕| 88久久精品无码一区二区毛片| 久久人人妻人人爽人人爽| 亚洲精品国产自在久久| 婷婷伊人久久大香线蕉AV| 狠狠色综合网站久久久久久久| 久久久久久久97| 色狠狠久久AV五月综合| 久久精品中文字幕一区| 一本久久免费视频| 久久亚洲中文字幕精品一区四 | 奇米影视7777久久精品人人爽 | 国产精品久久久久久五月尺| 国产精品成人精品久久久| 色综合久久天天综合| 久久精品国产99国产精品澳门| av无码久久久久久不卡网站| 久久久亚洲欧洲日产国码二区| 久久99精品久久久久久久不卡| 色综合久久中文字幕无码| 久久精品中文騷妇女内射| 久久久久成人精品无码中文字幕|