在面向对象系统中,有些对象由于某种原因(比如对象创建的开销大,或某些操作需要安全控制,或需要进程外的访问等)。直接访问会给使用者或系统结构带来麻烦。
为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。
class ISubject{
public:
virtual void process() = 0;
};
class RealSubject : public ISubject{
public:
virtual void process(){
//...
}
};
class ClientApp{
ISubject* subject;
public:
ClientApp(){
subject = new RealSubject(); // 可能拿不到 RealSubject
}
void doTask(){
// ...
subject->process();
// ...
}
};
class ISubject{
public:
virtual void process() = 0;
};
class SubjectProxy : public ISubject{
public:
virtual void process(){
//对 RealSubject 的一种间接访问
}
};
class ClientApp{
ISubject* subject;
public:
ClientApp(){
subject = new SubjectProxy(); // todo: 用工厂方式包装
}
void doTask(){
// ...
subject->process();
// ...
}
};