结构型设计模式:代理

代理模式允许在访问原对象时添加额外操作,如在真正进行网络连接前进行日志记录和连接建立。这种模式常用于控制大型资源的使用,例如当数据库查询可能消耗大量资源时。示例代码展示了如何创建一个代理类来管理实际的网络冲浪对象,以便在连接和使用之间进行控制,如处理网络延迟或限制用户连接频率。
摘要由CSDN通过智能技术生成

概念

代理对象控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。

要控制对于某个对象的访问的原因:有一些消耗大量系统资源的巨型对象, 只是偶尔需要使用它,比如数据库查询。

代码示例

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()而是使用代理是因为网络不好连接可能耗时间,在代理里面方便进行一些控制,比如进行一些时间的等待,一定时间内用户多次连接则不处理等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值