欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用代理模式來進行C#設(shè)計模式開發(fā)的基礎(chǔ)教程

 更新時間:2016年02月23日 09:20:44   作者:saville  
這篇文章主要介紹了使用代理模式來進行C#設(shè)計模式開發(fā)的基礎(chǔ)教程,代理模式主張在客戶端和目標對象中間建立中介來降低程序設(shè)計的耦合度,需要的朋友可以參考下

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

201622392005225.gif (405×252)

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

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

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

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

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

// 客戶端調(diào)用
  class Client
  {
    static void Main(string[] args)
    {
      // 創(chuàng)建一個代理對象并發(fā)出請求
      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();
      // 調(diào)用真實主題方法
      realSubject.BuyProduct();
      this.PostBuyProduct();
    }
    // 代理角色執(zhí)行的一些操作
    public void PreBuyProduct()
    {
      // 可能不知一個朋友叫這位朋友帶東西,首先這位出國的朋友要對每一位朋友要帶的東西列一個清單等
      Console.WriteLine("我怕弄糊涂了,需要列一張清單,張三:要帶相機,李四:要帶Iphone...........");
    }
             
    // 買完東西之后,代理角色需要針對每位朋友需要的對買來的東西進行分類
    public void PostBuyProduct()
    {
      Console.WriteLine("終于買完了,現(xiàn)在要對東西分一下,相機是張三的;Iphone是李四的..........");
    }
  }

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

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

優(yōu)點:

代理模式能夠?qū)⒄{(diào)用用于真正被調(diào)用的對象隔離,在一定程度上降低了系統(tǒng)的耦合度;
代理對象在客戶端和目標對象之間起到一個中介的作用,這樣可以起到對目標對象的保護。代理對象可以在對目標對象發(fā)出請求之前進行一個額外的操作,例如權(quán)限檢查等。
缺點:

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

相關(guān)文章

  • C# 下載文件 刪除文件 寫入文本的實例

    C# 下載文件 刪除文件 寫入文本的實例

    下面小編就為大家分享一篇C# 下載文件 刪除文件 寫入文本的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#的WebBrowser操作frame實例解析

    C#的WebBrowser操作frame實例解析

    這篇文章主要介紹了C#的WebBrowser操作frame實例解析,很適合C#初學者參考借鑒,需要的朋友可以參考下
    2014-08-08
  • WinForm中BackgroundWorker控件用法簡單實例

    WinForm中BackgroundWorker控件用法簡單實例

    這篇文章主要介紹了WinForm中BackgroundWorker控件用法,以一個簡單實例形式分析了BackgroundWorker控件的定義、設(shè)置及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • WPF+SkiaSharp實現(xiàn)自繪拖曳小球

    WPF+SkiaSharp實現(xiàn)自繪拖曳小球

    WPF的拖曳效果,基本配置一下,就可以了,但是自繪的話,就得自己控制。本文將利用WPF+SkiaSharp實現(xiàn)自繪拖曳小球,感興趣的可以動手嘗試一下
    2022-07-07
  • C#下載歌詞文件的同步和異步方法

    C#下載歌詞文件的同步和異步方法

    這篇文章主要為大家詳細介紹了C#下載歌詞文件的同步和異步方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Unity3D手機陀螺儀的使用方法

    Unity3D手機陀螺儀的使用方法

    這篇文章主要為大家詳細介紹了Unity3D手機陀螺儀的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Winform基于多線程實現(xiàn)每隔1分鐘執(zhí)行一段代碼

    Winform基于多線程實現(xiàn)每隔1分鐘執(zhí)行一段代碼

    這篇文章主要介紹了Winform基于多線程實現(xiàn)每隔1分鐘執(zhí)行一段代碼的方法,設(shè)計線程的操作及時間函數(shù)的用法,需要的朋友可以參考下
    2014-10-10
  • C#圖片上傳效果實例分析

    C#圖片上傳效果實例分析

    這篇文章主要介紹了C#圖片上傳效果實現(xiàn)方法,可實現(xiàn)圖片上傳效果預覽功能,需要的朋友可以參考下
    2015-06-06
  • C#中IList<T>與List<T>的區(qū)別深入解析

    C#中IList<T>與List<T>的區(qū)別深入解析

    本篇文章主要是對C#中IList<T>與List<T>的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#新手常犯的錯誤匯總

    C#新手常犯的錯誤匯總

    這篇文章主要介紹了C#新手常犯的錯誤匯總,對于經(jīng)驗豐富的C#程序員同樣具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08

最新評論