<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **定義:**代理模式(ProxyPattern),為其他對象提供一種代理以控制對這個對象的訪問。 類型:結構型模式 分類: 1. 遠程代理,為一個對象在不同的地址空間提供局部代表。 1. 虛代理,根據需要創建開銷很大的對象。 1. 保護代理,控制對原始對象的訪問。 1. 智能指引,取代簡單指針,在訪問時執行一些附加操作。 概述: 1. 遠程代理,如代理商,什么區域代、省代之類的都算是遠程代理。代理商在某一局部代表廠商。???? 1. 虛代理,主要是為了解決一次開銷過大的情況,例如打開大的文件之類的。 1. 保護代理,律師就是代理委托人行使其保護其權利,正好是保護代理。 1. 智能指針,智能指針,畫圖雙緩存等都算是智能指引了,主要是復用對象的某些特性自動完成某些工作,如構造函數、析構函數之類的。 ????????無論是哪一種代理,都是一個代理對象來代理完成被代理的工作,當然這期間代理對象會添加一些功能使得客戶更方便地操作。為了讓客戶操作代理對象像操作原對象一樣方便,代理類一般會保持和原對象相同的接口。上面四種代理模式,只是一些經常被用到的代理功能。實際的使用中,并不一定需要拘泥于這四種代理模式。一切為了讓用戶更方便更快捷地操作對象而產生的中間類都算是代理模式的運用。代理模式其實很簡單,就是一個代理類對另一個類的再封裝,以便更好的讓客戶調用。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6b4667ffdf.jpg) 參與者: 1. Client,客戶端提供交互。 1. Subject,提供接口。 1. RealSubject,完成接口,是真正需要被代理的類。 1. Proxy,有一個Subject的指針,指向RealSubject。調用RealSubject.DoSomething()實現DoSomething接口,并擴展一些功能。 示例代碼: ~~~ 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 namespace Design13 6 { 7 // 主要是提供接口 8 abstract class Subject 9 { 10 public abstract void DoSomething(); 11 } 12 13 // 具體的對象 14 class RealSubject : Subject 15 { 16 public override void DoSomething() 17 { 18 Console.WriteLine("做一些事"); 19 } 20 } 21 22 // 代理類,和具體的對象實現的是相同的接口 23 class Proxy : Subject 24 { 25 private Subject realSubject; 26 public Proxy() 27 { 28 realSubject = new RealSubject(); 29 } 30 public override void DoSomething() 31 { 32 if (realSubject != null) 33 { 34 realSubject.DoSomething(); 35 Console.WriteLine("再做一些其他事"); 36 } 37 } 38 } 39 40 // Client 41 class Program 42 { 43 static void Main(string[] args) 44 { 45 Proxy proxy = new Proxy(); 46 proxy.DoSomething(); 47 } 48 } 49 } ~~~ **注意:**如果是C++,抽象類一定要注意析構函數一定要是虛函數。 與其他模式比較:代理模式與裝飾者模式有一定的類似度。但是兩者目的不一樣,代理模式是為了讓客戶更方便地訪問。而裝飾者模式側重于添加新的功能。 優缺點: 1. 優點,減少內存的使用。 1. 缺點,加大了結構的復雜度,需要單獨管理外部狀態。 參考資料: 1. 《設計模式——可復用面向對象軟件基礎》 1. 《大話設計模式》 1. 《Head?First設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看