概念
代理对象控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。
要控制对于某个对象的访问的原因:有一些消耗大量系统资源的巨型对象, 只是偶尔需要使用它,比如数据库查询。
代码示例
class SurfInternet
{
public:
virtual void doWork() = 0;
virtual ~SurfInternet() {};
};
class RealSurf : public SurfInternet
{
public:
virtual void doWork() override
{
qDebug() << "进行网上冲浪活动";
}
};
class SurfInternetProxy : public SurfInternet
{
public:
SurfInternetProxy()
{
this->subject = new RealSurf();
}
void connect()
{
qDebug() << "建立连接";
}
void log()
{
qDebug() << "日志记录";
}
virtual void doWork() override
{
connect();
subject->doWork();
log();
}
private:
RealSurf* subject;
};
int main(int argc, char *argv[])
{
(new SurfInternetProxy())->doWork();
}
理论上讲,这里不直接使用connect()而是使用代理是因为网络不好连接可能耗时间,在代理里面方便进行一些控制,比如进行一些时间的等待,一定时间内用户多次连接则不处理等。