在某些面向对象系统中,有些对象由于对象创建开销很大、某些操作需要安全控制或需要进程外的访问,直接访问会给系统带来麻烦。
class ISubject{
public:
virtual void process();
};
class RealSubject:public ISubject{
public:
virtual void process(){
//......
}
};
class ClientApp{
ISubject* subject;
public:
ClientApp(){
subject=new RealSubject();//不通过代理模式直接创建使用的对象
subject=new SubjectProxy();//通过代理类间接访问使用对象的方法
}
subject->process();
};
对于这个代理类的设计,我们需要定义与需要访问类的接口一致,如常见public ISubject
class SubjectProxy:public ISubject{
RealSubject realsubject;//一般不通过这种方式间接调用
public:
virtual void process(){
//间接调用RealSubject
}
};
模式定义:为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。