代理模式
定义:
为其他对象提供一种代理以控制对这个对象的访问。
其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加许多用途。
结构图:
代码:
//Subject 类
class Subject
{
//对外暴露的共用接口
public:
void Request();
}
//RealSubject 类
class RealSubject : Subject
{
public:
//接口实际实现
void Request()
{
。。。;
}
}
//Proxy类
class Proxy: Subject
{
//保存一个RealSubject对象,这样就可以用代理代替实体
RealSubject* cRealSubject;
public:
//代理接口实现
void Request()
{
if(cRealSubject == null)
{
cRealSubject = new RealSubject();
}
//实现代理
cRealSubject .Request();
}
}
//客户端
Proxy cProxy = new Proxy();
cProxy.Request();
使用时机:
不想暴露实体的具体实现;
虚拟代理,通过虚拟代理存放实例化需要很长时间的真实对象。比如图片。
远程代理;
智能指引;
优点:
职责清晰;
高扩展,只要实现了接口,就可以使用代理模式;
智能化;
缺点:
增加了中间类,可能会减慢处理速度;
实现代理需要额外的工作,维护成本和复杂度增加。