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

            模式設計c#--結構型--proxy

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

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

            評論

            # re: 模式設計c#--結構型--proxy 2006-04-24 16:05 夢在天涯

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

            到底有什么不同啊?  回復  更多評論   

            # re: 模式設計c#--結構型--proxy 2006-04-24 16:05 夢在天涯

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

            公告

            EMail:itech001#126.com

            導航

            統計

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

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804159
            • 排名 - 5

            最新評論

            閱讀排行榜

            麻豆一区二区99久久久久| 99久久免费国产精品热| 久久精品国产精品国产精品污| 国产精品乱码久久久久久软件| 久久久精品久久久久特色影视| 久久久久国色AV免费观看| 国产免费久久精品99久久| 国产精品日韩欧美久久综合| 免费观看久久精彩视频| 狠狠色丁香婷婷综合久久来来去| 久久WWW免费人成—看片| 色欲综合久久躁天天躁| 婷婷久久综合| 午夜天堂av天堂久久久| 国产精品99久久精品| 久久99精品久久久久久野外| 人妻少妇精品久久| 久久精品无码一区二区WWW| 久久99精品国产麻豆| 国产精品成人久久久久久久| 综合久久精品色| 俺来也俺去啦久久综合网| 国产高潮国产高潮久久久91| 亚洲日韩欧美一区久久久久我| 天天躁日日躁狠狠久久| 大美女久久久久久j久久| 热久久视久久精品18| 国产精品天天影视久久综合网| 久久er国产精品免费观看8| 久久精品免费一区二区| 精品久久久久久国产免费了| 久久久久久综合网天天| 国产精品狼人久久久久影院 | 国产成人精品久久亚洲高清不卡| 亚州日韩精品专区久久久| 国产欧美久久久精品| 精品久久久久久久久免费影院| 四虎国产精品免费久久5151| 久久精品视频一| 久久精品国产色蜜蜜麻豆| 99久久精品国产高清一区二区|