亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2016年02月23日 09:20:44   作者:saville  
這篇文章主要介紹了使用代理模式來(lái)進(jìn)行C#設(shè)計(jì)模式開(kāi)發(fā)的基礎(chǔ)教程,代理模式主張?jiān)诳蛻?hù)端和目標(biāo)對(duì)象中間建立中介來(lái)降低程序設(shè)計(jì)的耦合度,需要的朋友可以參考下

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

201622392005225.gif (405×252)

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

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

在上面所有種類(lèi)的代理模式中,虛擬代理、遠(yuǎn)程代理、智能引用代理和保護(hù)代理較為常見(jiàn)的代理模式。下面讓我們具體看看代理模式的具體定義。

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

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

// 客戶(hù)端調(diào)用
  class Client
  {
    static void Main(string[] args)
    {
      // 創(chuàng)建一個(gè)代理對(duì)象并發(fā)出請(qǐng)求
      Person proxy = new Friend();
      proxy.BuyProduct();
      Console.Read();
    }
  }
  // 抽象主題角色
  public abstract class Person
  {
    public abstract void BuyProduct();
  }
  //真實(shí)主題角色
  public class RealBuyPerson : Person
  {
    public override void BuyProduct()
    {
      Console.WriteLine("幫我買(mǎi)一個(gè)IPhone和一臺(tái)蘋(píng)果電腦");
    }
  }
  // 代理角色
  public class Friend:Person
  {
    // 引用真實(shí)主題實(shí)例
    RealBuyPerson realSubject;
    public override void BuyProduct()
    {
      Console.WriteLine("通過(guò)代理類(lèi)訪問(wèn)真實(shí)實(shí)體對(duì)象的方法");
      if (realSubject == null)
      {
        realSubject = new RealBuyPerson();
      }
      this.PreBuyProduct();
      // 調(diào)用真實(shí)主題方法
      realSubject.BuyProduct();
      this.PostBuyProduct();
    }
    // 代理角色執(zhí)行的一些操作
    public void PreBuyProduct()
    {
      // 可能不知一個(gè)朋友叫這位朋友帶東西,首先這位出國(guó)的朋友要對(duì)每一位朋友要帶的東西列一個(gè)清單等
      Console.WriteLine("我怕弄糊涂了,需要列一張清單,張三:要帶相機(jī),李四:要帶Iphone...........");
    }
             
    // 買(mǎi)完?yáng)|西之后,代理角色需要針對(duì)每位朋友需要的對(duì)買(mǎi)來(lái)的東西進(jìn)行分類(lèi)
    public void PostBuyProduct()
    {
      Console.WriteLine("終于買(mǎi)完了,現(xiàn)在要對(duì)東西分一下,相機(jī)是張三的;Iphone是李四的..........");
    }
  }

在上面的代碼中都有相應(yīng)的注釋?zhuān)@里也不多解釋了。

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

優(yōu)點(diǎn):

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

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

相關(guān)文章

最新評(píng)論