1、概述
在軟件開發中,有些對象因爲建立成本高、訪問時須要與其它進程交互等緣由,直接訪問會形成系統速度慢、複雜度增大等問題。這時可使用代理模式,給系統增長一層間接層,經過間接層訪問對象,從而達到隱藏系統複雜性、提升系統性能的目的。
2、代理模式
代理模式爲其餘對象提供一種代理以控制對這個對象的訪問。其結構圖以下:緩存
Subject定義了RealSubject和Proxy共用的接口,使得在任何使用RealSubject的地方均可以使用Proxyide
abstract class Subject { public abstract void Request(); }
RealSubject定義了Proxy所表明的實體。性能
class RealSubject : Subject { public override void Request() { Console.WriteLine("真實的請求"); } }
Proxy定義了一個控制RealSubject的代理,供Client使用。ui
class Proxy : Subject { RealSubject realSubject; public override void Request() { if (realSubject == null) { realSubject = new RealSubject(); } realSubject.Request(); } }
客戶端代碼:spa
class Program { static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.Request(); Console.Read(); } }
代理模式根據用途不一樣能夠分爲幾種類型:
1.遠程代理:爲一個位於不一樣的地址空間的對象提供局部表明,將系統隱藏不一樣地址空間之間交互的細節起來,使得客戶端能夠認爲被代理的對象是本地的而不是遠程的。如.NET裏爲WebService建立的代理類。
2.虛擬代理:根據須要建立一個資源消耗較大的對象,使得被代理的對象只有在必要的時候才被建立加載。如StringBuilder類的實現。
3.其它代理:能夠爲被代理的對象增長訪問控制、數據緩存等功能。代理