• <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

            最新評論

            閱讀排行榜

            99久久99久久精品免费看蜜桃 | 午夜精品久久久久久99热| 久久精品人人做人人爽电影| 久久er国产精品免费观看2| 久久精品视屏| 无码专区久久综合久中文字幕| 777米奇久久最新地址| 国产精品久久久久久久久鸭| 久久九九久精品国产免费直播| 一级女性全黄久久生活片免费 | 一本色道久久综合亚洲精品| 久久夜色精品国产噜噜噜亚洲AV| 国产91色综合久久免费| 色综合久久久久综合99| 久久这里只有精品18| 精品久久久久久国产三级| 伊人久久成人成综合网222| 久久美女网站免费| 久久精品中文字幕大胸| 久久久久久久97| 国产精品青草久久久久婷婷| 蜜臀久久99精品久久久久久| 99久久99久久| 色综合久久无码中文字幕| 久久久精品久久久久久| 99久久精品国内| 老色鬼久久亚洲AV综合| 午夜精品久久久久久影视777| 久久国产精品-国产精品| 精产国品久久一二三产区区别 | 久久AAAA片一区二区| 精品国产乱码久久久久久1区2区| 久久久这里有精品| 色天使久久综合网天天| 看全色黄大色大片免费久久久| 国产精品久久久久久久| 久久精品国产影库免费看| 国产精品久久久久9999| 精品久久久久久无码中文字幕一区 | 亚洲乱码精品久久久久..| 久久无码专区国产精品发布|