代理模式(Proxy):为其他对象提供一种代理对这个对象的访问。代理模式(Proxy)的结构图如下:
Subject 类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。
RealSubject类,定义Proxy所代表的真实实体。
class Subject
{
public:
void Request();
};
class RealSubject: public Subject
{
public:
void Request()
{
cout<<"真实的请求";
}
};
Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。
class Proxy:public Subject
{
public:
RealSubject *realSubject;
void Request()
{
if(realSubject == null)
{
realSubject = new RealSubject ();
}
realSubject ->Request();
}
};
客户端代码
void main()
{
Proxy* proxy = new Proxy ();
proxy ->Request;
}
代理模式应用场合:
1、远程代理。一个对象再不同的地址控件提供局部代理,这样可以隐藏一个对象存在于不同地址空间的事实。
2、虚拟代理。根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
3、安全代理。用来控制真实对象访问时的权限。
4、智能指引,是指当调用真实的对象时,代理处理另外一些事。
都是通过代理在访问一个对象时附加一些内务处理。