1. 概述
为其它对象提供一种代理以控制对这个对象的访问。
解决的问题:如果直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题。这样对于客户端(调用者)来说,就不需要直接与真实对象进行交互,解除了调用者与真实对象的耦合。
2. 模式中的角色
2.1 抽象实体(Subject):定义了真实实体(RealSubject)和代理(Proxy)的公共接口,这样就在任何时候使用真实实体(RealSubject)的地方使用代理(Proxy)。
2.2 代理(Proxy):保存一个引用使得代理可以直接访问真实实体,并提供一个与Subject的接口相同的接口,这样代理就可以代替真实实体。
2.3 真实实体(RealSubject):定义Proxy所代表的真实实体。
3. 模式解读
3.1 代理模式的类图
3.2 代理模式的代码实现
3.2.1 抽象实体,定义真实实体与代理的公共接口
/// <summary>
/// 抽象实体,定义真实实体与代理的公共接口
/// </summary>
public interface ISubject
{
void Function1();
void Function2();
}
3.2.2 真实实体,真正的功能实现者
/// <summary>
/// 真实实体,真正的功能实现者
/// </summary>
public class RealSubject:ISubject
{
public void Function1()
{
Console.WriteLine("This is the first function.");
}
public void Function2()
{
Console.WriteLine("This is the second function.");
}
}
3.2.3 代理,用来控制和访问真实实体
/// <summary>
/// 代理,用来访问真实的实体
/// </summary>
public class Proxy : ISubject
{
/// <summary>
/// 保存一个真实实体,用以在代理中访问真实实体的功能。
/// </summary>
private RealSubject realSubject;
public Proxy()
{
realSubject = new RealSubject();
}
/// <summary>
/// 实现与Subject相同的接口,实际调用的是RealSubject的Function1()
/// </summary>
public void Function1()
{
realSubject.Function1();
}
/// <summary>
/// 实现与Subject相同的接口,实际调用的是RealSubject的Function2()
/// </summary>
public void Function2()
{
realSubject.Function2();
}
}











