国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

使用代理模式來進行C#設計模式開發的基礎教程

2020-01-24 01:15:44
字體:
來源:轉載
供稿:網友

一、概述
在軟件開發中,有些對象由于創建成本高、訪問時需要與其它進程交互等原因,直接訪問會造成系統速度慢、復雜度增大等問題。這時可以使用代理模式,給系統增加一層間接層,通過間接層訪問對象,從而達到隱藏系統復雜性、提高系統性能的目的。
二、代理模式的詳細介紹
代理模式為其他對象提供一種代理以控制對這個對象的訪問。其結構圖如下:

201622392005225.gif (405×252)

Subject定義了RealSubject和Proxy共用的接口,使得在任何使用RealSubject的地方都可以使用Proxy
RealSubject定義了Proxy所代表的實體。
Proxy定義了一個控制RealSubject的代理,供Client使用。
代理模式按照使用目的可以分為以下幾種:

  • 遠程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以是本電腦中,也可以在另一臺電腦中。最典型的例子就是――客戶端調用Web服務或WCF服務。
  • 虛擬(Virtual)代理:根據需要創建一個資源消耗較大的對象,使得對象只在需要時才會被真正創建。
  • Copy-on-Write代理:虛擬代理的一種,把復制(或者叫克隆)拖延到只有在客戶端需要時,才真正采取行動。
  • 保護(Protect or Access)代理:控制一個對象的訪問,可以給不同的用戶提供不同級別的使用權限。
  • 防火墻(Firewall)代理:保護目標不讓惡意用戶接近。
  • 智能引用(Smart Reference)代理:當一個對象被引用時,提供一些額外的操作,比如將對此對象調用的次數記錄下來等。
  • Cache代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以這些結果。

在上面所有種類的代理模式中,虛擬代理、遠程代理、智能引用代理和保護代理較為常見的代理模式。下面讓我們具體看看代理模式的具體定義。

2.1 定義
代理模式――就是給某一個對象提供一個代理,并由代理對象控制對原對象的引用。在一些情況下,一個客戶不想或者不能直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。例如電腦桌面的快捷方式就是一個代理對象,快捷方式是它所引用的程序的一個代理。

2.2 代理模式實現
看完代理模式的描述之后,下面以一個生活中的例子來解釋下代理模式,在現實生活中,如果有同事出國或者朋友出國的情況下,我們經常會拖這位朋友幫忙帶一些電子產品或化妝品等東西,這個場景中,出國的朋友就是一個代理,他(她)是他(她)朋友的一個代理,由于他朋友不能去國外買東西,他卻可以,所以朋友們都托他幫忙帶一些東西的。下面就以這個場景來實現下代理模式,具體代碼如下:

// 客戶端調用  class Client  {    static void Main(string[] args)    {      // 創建一個代理對象并發出請求      Person proxy = new Friend();      proxy.BuyProduct();      Console.Read();    }  }  // 抽象主題角色  public abstract class Person  {    public abstract void BuyProduct();  }  //真實主題角色  public class RealBuyPerson : Person  {    public override void BuyProduct()    {      Console.WriteLine("幫我買一個IPhone和一臺蘋果電腦");    }  }  // 代理角色  public class Friend:Person  {    // 引用真實主題實例    RealBuyPerson realSubject;    public override void BuyProduct()    {      Console.WriteLine("通過代理類訪問真實實體對象的方法");      if (realSubject == null)      {        realSubject = new RealBuyPerson();      }      this.PreBuyProduct();      // 調用真實主題方法      realSubject.BuyProduct();      this.PostBuyProduct();    }    // 代理角色執行的一些操作    public void PreBuyProduct()    {      // 可能不知一個朋友叫這位朋友帶東西,首先這位出國的朋友要對每一位朋友要帶的東西列一個清單等      Console.WriteLine("我怕弄糊涂了,需要列一張清單,張三:要帶相機,李四:要帶Iphone...........");    }                 // 買完東西之后,代理角色需要針對每位朋友需要的對買來的東西進行分類    public void PostBuyProduct()    {      Console.WriteLine("終于買完了,現在要對東西分一下,相機是張三的;Iphone是李四的..........");    }  }

在上面的代碼中都有相應的注釋,這里也不多解釋了。

三、代理模式的優缺點
全面分析完代理模式之后,讓我們看看這個模式的優缺點:

優點:

代理模式能夠將調用用于真正被調用的對象隔離,在一定程度上降低了系統的耦合度;
代理對象在客戶端和目標對象之間起到一個中介的作用,這樣可以起到對目標對象的保護。代理對象可以在對目標對象發出請求之前進行一個額外的操作,例如權限檢查等。
缺點:

由于在客戶端和真實主題之間增加了一個代理對象,所以會造成請求的處理速度變慢
實現代理類也需要額外的工作,從而增加了系統的實現復雜度。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武夷山市| 莱芜市| 鹿泉市| 同心县| 子长县| 垦利县| 沧州市| 平顺县| 桦南县| 格尔木市| 登封市| 临潭县| 循化| 林周县| 丁青县| 达州市| 福清市| 建昌县| 达日县| 盐池县| 定西市| 鹰潭市| 瑞丽市| 岳普湖县| 澄江县| 浮山县| 商水县| 泾阳县| 苗栗市| 比如县| 鹤山市| 信宜市| 莱芜市| 东丽区| 天等县| 鄂尔多斯市| 大兴区| 岱山县| 铁岭市| 灵丘县| 新乡县|