代理模式的定义是:
为其他对象提供一个代理或占位符来访问这个对象。
其UML类图的示例如下:
在这个模式中,参与者包括:
- Proxy:
- 维护一个引用,让代理访问real subject。如果RealSubject和Subject接口相同,那么Proxy可能指向Subject
- 提供一个与Subject相同的接口,让代理可以被取代为real subject。
- 控制访问real subject,且可能负责创建和删除它。
- remote proxies:负责编码一个请求和其参数,在不同的地址区域发送编码后的请求给real subject。
- virtual proxies:可能缓存关于real subject附加信息,让他们延缓访问它。比如Motivation中的ImageProxy缓存了真实的图片范围。
- protection proxies:检查调用者有执行请求的访问权限。
- Subject:定义一个通用的接口用于RealSubject和Proxy,让Proxy可以在RealSubject期待的任何地方使用。
- RealSubject:定义一个proxy表示的real object。
实现代码:
public interface Subject
{
void PerformAction();
}
public class RealSubject : Subject
{
public void PerformAction()
{
Console.WriteLine("RealSubject action performed.");
}
}
public class Proxy : Subject
{
private RealSubject _realSubject;
public void PerformAction()
{
if (_realSubject == null)
_realSubject = new RealSubject();
_realSubject.PerformAction();
}
}
- 对象按需创建,也就是说操作是经过请求的。
- 需要对原始对象的访问控制。
- 允许通过本地对象访问远程对象。