• <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 夢在天涯 閱讀(929) 評論(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

            搜索

            •  

            積分與排名

            • 積分 - 1804314
            • 排名 - 5

            最新評論

            閱讀排行榜

            亚洲va久久久噜噜噜久久狠狠| 欧洲精品久久久av无码电影| 久久久久人妻一区精品色| 女同久久| 久久久久久极精品久久久| 国产精品久久亚洲不卡动漫| 久久久久久九九99精品| 无码专区久久综合久中文字幕| 精品久久久一二三区| 麻豆久久| 久久精品国产99国产精品导航 | 久久香综合精品久久伊人| 久久婷婷五月综合色奶水99啪| 久久午夜无码鲁丝片秋霞 | 久久亚洲高清观看| 久久精品国产精品国产精品污| 国产成人久久精品区一区二区| 久久最近最新中文字幕大全| 国产日韩久久久精品影院首页| 久久精品中文字幕一区| 久久99热这里只有精品66| 亚洲国产美女精品久久久久∴| 久久久久99精品成人片欧美| 久久久久久狠狠丁香| 久久天天日天天操综合伊人av| 一级a性色生活片久久无| 7777久久久国产精品消防器材| 99久久精品国产麻豆| 久久人人爽人人精品视频| 理论片午午伦夜理片久久| 少妇久久久久久被弄高潮| 蜜桃麻豆www久久| 久久久精品国产| 国产一区二区精品久久| 亚洲国产成人久久笫一页| 精品久久8x国产免费观看| 久久久久99精品成人片三人毛片 | 91精品国产综合久久香蕉 | 久久精品无码一区二区三区日韩| 亚洲国产小视频精品久久久三级| 久久精品中文无码资源站|