当用户无法直接访问某个对象或某个对象存在困难时可以通过一个代理对象来间接访问,为保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据使用目的不同可以分为:保护代理(Protect Proxy)、远程代理(Remote Proxy)、虚拟代理(Virtual Proxy)、缓冲代理(Cache Proxy)等。
代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。
代理模式有3种角色:
1.Subject(抽象主题角色):它声明了真实主题和代理主题的共同接口,客户端通常需要针对抽象主题角色进行编程。
2.Proxy(代理主题角色):它包含了对真实主题的引用,从而可以在任何时候操控真实的主题对象。
3.RealSubject(真实主题角色):它定义了代理角色所代表的真实对象,在真实主题角色中实现真实的业务操作。
典型抽象主题类: abstract class Subject { public abstract void Request(); }
真实主题类: class RealSubject:Subject { public override void Request() { //业务方法具体实现代码 } }
简单代理类: class Proxy:Subject { private RealSubject realSubject = new RealSubject();//维持一个对真实主题对象的引用 public void PreRequest() { .... } public override void Request() { PreRequest(); realSubject.Request(); //调用真实主题对象的方法。 PostRequest(); } public void PostRequest() { .... } }