代理模式
代理模式:为其它对象提供了一种代理,以控制对这个对象的访问
代理在客户端和实际实体之间增加了一层处理,主要有下列几种使用场合
1 远程代理,为一个对象在不同的地址空间提供局部代表,隐藏了一个对象存在于不同地址空间的事实,如Web引用
2 虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,从而优化性能,如浏览器
3 安全代理,用来控制真实对象访问时的权限
4 智能引用,当调用真实对象时,代理处理另外一些事,如自动释放,持久化对象,加锁等
最简单的代理模式例子如下:
/// <summary> /// 定义实体和代理都需要实现的接口 /// </summary> public interface ISubject { void Request(); } /// <summary> /// 定义实际的实体 /// </summary> public class RealSubject : ISubject { public void Request() { Console.WriteLine("Real Request"); } } /// <summary> /// 定义代理,其中保存一个实体的引用,在调用代理方法时执行实际实体的方法 /// </summary> public class Proxy : ISubject { ISubject subject; public Proxy() { subject = new RealSubject(); } public void Request() { subject.Request(); } }
客户端通过调用代理,调用实际对象的方法:
Proxy proxy = new Proxy(); proxy.Request();