代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的反问。
* 抽象主题角色(Subject):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题。
* 代理主题(Proxy)角色:代理主题角色内部含有对真是主题的引用,从而可以在任何时候操作真实主题对象;
代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主体;
控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除真实主题对象);
代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯的将调用传递给真实主题对象。
* 真实主题角色(RealSubject)角色:定义了代理角色所代表的真实对象。
如下代码 通过代理类 Proxy 来实现,真实主题角色(RealSubject)中的 Request() 方法。
没有直接 实例化 RealSubject 类 来实现。
static void Main(string[] args) { // 创建代理和请求一个服务 Proxy p = new Proxy(); p.Request(); Console.ReadLine(); } /// <summary> /// 抽象主题角色(Subject) /// </summary> public abstract class Subject { // 函数 public abstract void Request(); } /// <summary> /// 真实主题角色(RealSubject)角色 /// </summary> public class RealSubject : Subject { // 方法 public override void Request() { Console.WriteLine("Called RealSubject.Request()"); } } /// <summary> /// 代理主题(Proxy)角色 /// </summary> public class Proxy : Subject { // 变量字段 RealSubject realSubject; // 从写方法 public override void Request() { if (realSubject == null) realSubject = new RealSubject(); preRequest(); realSubject.Request(); postRequest(); } public void preRequest() { Console.WriteLine("PreRequest."); } public void postRequest() { Console.WriteLine("PostRequest."); } }