定义:为其他对象提供一种代理以控制对这个对象的访问。
结构图:
Subject类:
abstract class Subject
{
public abstract void Request();
}
RealSubject类:
class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("真是的请求");
}
}
Proxy类:
class Proxy : Subject { RealSubject realSubject; public override void Request() { if (realSubject == null) { realSubject = new RealSubject(); } realSubject.Request(); } }
客户端代码:
class Program { static void Main(string[] args) { Proxy proxy = new Proxy(); proxy.Request(); Console.Read(); } }
实用性:
1.远程代理:也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在不同地址空间的事实。
示例:WebService,云服务
2.虚拟代理:根据需要创建开销大对象,通过它来存放实例化需要很长时间的真是对象。
示例:打开一个很大的HTML网页时,里面可能有很多的文字和图片,但是还能很快的打开,此时所看到的是所有的文字,而图片却是一张张的
下载后才能看到。那些为打开的图片框,就是通过虚拟代理来代替了真是的图片,此时代理存储了真实图片的地址和尺寸。
3.安全代理:用来控制真实对象的访问权限。一般用于对象应该有不同的访问权限的时候。
4.智能引用:是指当调用真实对象时,代理处理另外一些事。