標籤:
一、前言
代理模式是為其他對象提供一種代理以控制對這個對象的訪問。
二、結構圖
三、執行個體代碼
namespace 代理模式{ class Program { static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.Request(); Console.Read(); } } abstract class Subject { public abstract void Request(); } class RealSubject : Subject { public override void Request() { Console.WriteLine("真實的請求"); } } class Proxy : Subject { RealSubject realSubject; public override void Request() { if (realSubject == null) { realSubject = new RealSubject(); } realSubject.Request(); } }}
四、總結
什麼時候使用代理模式呢?
第一,遠程代理,也就是為一個對象在不同的地址空間提供局部代表,這樣就可以隱藏一個對象存在於不同地址空間的事實。例如在.net中的webservice,當我們在應用程式中加入一個Web引用,引用一個webservice,則此時在項目中會產生一個WebReference的檔案夾和一些檔案,其實它們就是代理,這就使得用戶端程式滴啊用代理就可以解決遠端存取的問題。
第二,虛擬代理,根據需要建立開銷很大的對象,通過它來存放執行個體化需要很長時間的真實對象,這樣達到效能的最佳化,例如開啟一個很大的HTML頁面,裡面有很多文字和圖片,那些文字載入了,但是圖片沒有載入完,只看到圖片佔用一定大小的空間,等待內容的填充,這就是通過虛擬代理來替代真實的圖片,此時代理儲存了真實的圖片的路徑和尺寸,這就是瀏覽器中用到的模式進行最佳化下載。
第三,安全代理,用來控制真實對象的存取權限。
第四,智能指引,指當調用真實的對象時,代理處理另外一些事,例如計算真實對象的引用次數,這樣當該對象沒有引用時,可以自動釋放它,或者當第一次引用一個持久對象時,將它裝入記憶體,或在訪問一個實際對象前,檢查是否已經鎖定它了,以保證其他對象不能改變它。
C#物件導向設計之——代理模式(十三)