• <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++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

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

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

            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 夢在天涯 閱讀(945) 評論(2)  編輯 收藏 引用 所屬分類: Design pattern

            評論

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

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

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

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

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

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1811191
            • 排名 - 5

            最新評論

            閱讀排行榜

            国産精品久久久久久久| 国产精品一区二区久久不卡| 伊人久久大香线蕉AV一区二区| 久久这里都是精品| 久久er热视频在这里精品| 久久无码人妻精品一区二区三区| 久久久久久亚洲精品无码| 国产激情久久久久久熟女老人| 麻豆精品久久久一区二区| 色综合久久久久无码专区| 66精品综合久久久久久久| 香蕉久久av一区二区三区| 很黄很污的网站久久mimi色| 久久精品无码专区免费东京热| 久久黄色视频| 亚洲一区中文字幕久久| 色8久久人人97超碰香蕉987| 波多野结衣久久| 青青热久久国产久精品 | 99国内精品久久久久久久| 国内精品伊人久久久影院| 久久亚洲中文字幕精品一区| 亚洲国产精品久久| 91精品国产综合久久精品| 99国产欧美精品久久久蜜芽| 亚洲国产精品18久久久久久| 久久久久久久免费视频| 久久国产AVJUST麻豆| 2021国内久久精品| 中文字幕无码av激情不卡久久| 欧美日韩成人精品久久久免费看| 国产福利电影一区二区三区久久久久成人精品综合 | 久久精品国产精品亚洲艾草网美妙| 97久久超碰成人精品网站| 欧洲成人午夜精品无码区久久 | 精品国产日韩久久亚洲| 久久综合久久综合亚洲| 中文国产成人精品久久不卡| 国产色综合久久无码有码| 久久无码人妻一区二区三区午夜| 久久久久成人精品无码中文字幕|