全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++如何实现一个代理模式_C++设计模式之为其他对象提供一种代理以控制对这个对象的访问

代理模式通过代理类控制对真实对象的访问,适用于延迟加载、权限控制等场景。①定义抽象基类Subject声明接口;②RealSubject实现具体逻辑;③Proxy持有RealSubject指针,通过多态统一处理请求,在调用前后可附加控制逻辑。

代理模式的核心是通过一个代理类来控制对真实对象的访问,适用于需要延迟加载、权限控制、日志记录或远程调用等场景。在C++中,代理模式通常通过接口(抽象基类)和多态实现。

定义公共接口

为了让代理类和真实类能被统一处理,先定义一个抽象基类,声明共同的操作接口。

class Subject {
public:
    virtual ~Subject() = default;
    virtual void request() = 0;
};

实现真实对象

真实类继承接口并实现具体逻辑,它是被代理的目标对象。

class RealSubject : public Subject {
public:
    void request() override {
        std::cout << "RealSubject: 处理请求\n";
    }
};

实现代理类

代理类也继承同一接口,在内部持有真实对象的指针。它可以在转发请求前后添加额外控制逻辑。

class Proxy : public Subject {
private:
    RealSubject* realSubject;
    bool hasAccess;
void checkAccess() {
    std::cout << "Proxy: 检查访问权限...\n";
}

void logAccess() {
    std::cout << "Proxy: 记录请求日志\n";
}

public: Proxy(RealSubject* subject, bool access) : realSubject(subject), hasAccess(access) {}

void request() override {
    if (hasAccess) {
        checkAccess();
        if (!realSubject) {
            realSubject = new RealSubject();
        }
        realSubject->request();
        logAccess();
    } else {
        std::cout << "Proxy: 拒绝访问\n";
    }
}

~Proxy() override {
    delete realSubject;
}

};

使用示例

客户端通过代理访问真实对象,无需知道背后是否经过控制。

int main() {
    RealSubject* real = new RealSubject();
    Proxy proxy(real, true);
proxy.request(); // 输出完整流程

Proxy limitedProxy(nullptr, false);
limitedProxy.request(); // 被拒绝

return 0;

}

代理模式让访问控制变得灵活。你可以用它实现懒加载——只有在真正需要时才创建真实对象;也可以加入认证、缓存、监控等功能。关键是保持代理与真实对象接口一致,对外表现透明。

基本上就这些。结构简单但很实用。


# c++  # proxy  # 延迟加载  # 多态  # bool  # 指针  # 继承  # 接口  # public  # 对象  # Access  # 适用于  # 加载  # 你可以  # 它是  # 它可以  # 等功能  # 用它  # 时才  # 但很 


相关文章: 大连网站设计制作招聘信息,大连投诉网站有哪些?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  XML的“混合内容”是什么 怎么用DTD或XSD定义  婚礼视频制作网站,学习*后期制作的网站有哪些?  全景视频制作网站有哪些,全景图怎么做成网页?  ,制作一个手机app网站要多少钱?  如何安全更换建站之星模板并保留数据?  济南企业网站制作公司,济南社保单位网上缴费步骤?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何快速搭建高效可靠的建站解决方案?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  西安大型网站制作公司,西安招聘网站最好的是哪个?  建站之星安装模板失败:服务器环境不兼容?  如何快速上传建站程序避免常见错误?  盘锦网站制作公司,盘锦大洼有多少5G网站?  网站制作网站,深圳做网站哪家比较好?  网站制作公司,橙子建站是合法的吗?  寿县云建站:智能SEO优化与多行业模板快速上线指南  公司网站制作价格怎么算,公司办个官网需要多少钱?  常州自助建站费用包含哪些项目?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何在香港免费服务器上快速搭建网站?  建站主机核心功能解析:服务器选择与网站搭建流程指南  威客平台建站流程解析:高效搭建教程与设计优化方案  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何快速使用云服务器搭建个人网站?  广州美橙建站如何快速搭建多端合一网站?  浅析上传头像示例及其注意事项  历史网站制作软件,华为如何找回被删除的网站?  Swift中switch语句区间和元组模式匹配  建站ABC备案流程中有哪些关键注意事项?  山东网站制作公司有哪些,山东大源集团官网?  如何用免费手机建站系统零基础打造专业网站?  制作网站的软件免费下载,免费制作app哪个平台好?  如何在腾讯云免费申请建站?  如何注册花生壳免费域名并搭建个人网站?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  建站之星安装提示数据库无法连接如何解决?  建站之星如何保障用户数据免受黑客入侵?  建站主机无法访问?如何排查域名与服务器问题  网站企业制作流程,用什么语言做企业网站比较好?  制作宣传网站的软件,小红书可以宣传网站吗?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何通过西部建站助手安装IIS服务器?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  制作销售网站教学视频,销售网站有哪些?  网站制作公司广州有几家,广州尚艺美发学校网站是多少? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。