代理模式(Proxy Pattern):
为其他对象提供一种代理以控制对这个对象的访问。客户端调用时直接使用代理来访问。
结构说明(结构图略)
Subject类:定义了RealSubject和Proxy的公用接口,这样就在任何使用RealSubject的地方都可以用Proxy类代理访问。
RealSubject类:定义了Proxy所代表的真实实体
Proxy类:保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来代替实体。
分类:
(1)Virtual Proxy 虚拟代理:Proxy不会生成一个真实的耗费代理,直到非常有必要时(首次请求时)。它用来存放
花费大(实例化需要很长时间)的真实对象。(如:网页图片的首次加载)
(2)Remote Proxy(远程代理):本地的代理对象控制一个远程的对象。(如:WebService的调用)
(3)Protection Proxy(安全代理):代理检查调用真实对象所需要的权限。
(4)Smart Reference(智能引用):当调用真实的对象时,代理处理另外一些事。
实例:模拟快捷方式代理打开应用程序
在桌面上创建一个快捷方式,双击也能打开相应的应用程序,这其实就是一个代理模式。
/// <summary>
/// 公共接口类:Subject类
/// </summary>
public interface IShortCut
{
//定义一个方法用于运行指定路径的应用程序
void RunApplication(string path);
}
/// <summary>
/// 真实实体类:RealSubject类
/// </summary>
public class RealShortCut:IShortCut
{
public void RunApplication(string path)
{
try
{
System.Diagnostics.Process.Start(path);
}
catch (Exception ex)
{
throw;
}
}
}
/// <summary>
/// 代理类:Proxy
/// </summary>
public class ProxyShortCut:IShortCut
{
RealShortCut shortcut;
public void RunApplication(string path)
{
if (shortcut == null)
{
shortcut = new RealShortCut();
}
shortcut.RunApplication(path);
}
}
调用:
ProxyShortCut shortcut = new ProxyShortCut();
shortcut.RunApplication("notepad.exe");