程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用代理模式來進行C#設計模式開發的基礎教程

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

編輯:關於C語言

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

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

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 // 客戶端調用 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是李四的.........."); } }

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

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

優點:

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved