全网整合营销服务商

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

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

C++如何实现一个代理(Proxy)设计模式?(代码示例)

代理模式的核心是代理对象持有真实对象引用并提供相同接口,将调用转发给真实对象,同时在前后插入额外逻辑;C++中通过抽象基类定义纯虚接口,由RealImage和ProxyImage共同继承,ProxyImage延迟加载RealImage以实现虚拟代理。

代理模式的核心是让代理对象持有真实对象的引用,对外提供相同接口,把调用转发给真实对象,同时在前后可插入额外逻辑(如权限检查、日志、延迟加载等)。C++中常用抽象基类定义接口,由真实类和代理类共同继承。

定义统一接口

先用纯虚函数声明操作契约,确保代理与真实对象行为一致:

class Image {
public:
    virtual ~Image() = default;
    virtual void display() const = 0;
};

实现真实对象

真实类负责核心功能,比如加载并显示图片:

class RealImage : public Image {
private:
    std::string filename;

public: explicit RealImage(const std::string& f) : filename(f) { std::cout << "Loading image: " << filename << "\n"; // 模拟耗时加载 std::this_thread::sleep_for(std::chrono::milliseconds(500)); }

void display() const override {
    std::cout << "Displaying image: " << filename << "\n";
}

};

实现代理类

代理持有一个真实对象指针(延迟初始化或直接持有),重写接口方法,在调用前后加入控制逻辑:

class ProxyImage : public Image {
private:
    std::string filename;
    mutable RealImage* real_image; // mutable 允许在 const 成员函数中修改

public: explicit ProxyImage(const std::string& f) : filename(f), real_image(nullptr) {}

~ProxyImage() {
    delete real_image;
}

void display() const override {
    if (!real_image) {
        real_image = new RealImage(filename);
    }
    real_image->display();
}

};

使用方式

客户端只依赖 Image 接口,无需感知是代理还是真实对象:

int main() {
    Image* image1 = new ProxyImage("photo.jpg");
    Image* image2 = new ProxyImage("report.pdf");
image1->display(); // 触发加载 + 显示
image1->display(); // 直接显示(已加载)
image2->display(); // 触发加载 + 显示

delete image1;
delete image2;
return 0;

}

这个例子展示的是“虚拟代理”(lazy initialization),其他常见变体如保护代理(加访问控制)、远程代理(封装网络调用)、智能引用代理(自动计数/释放)等,都遵循同一结构:接口统一、代理持有真实对象、转发+增强。


# ai  # c++  # proxy  # pdf  # 延迟加载  # 封装  # 指针  # 继承  # 虚函数  # 纯虚函数  # 接口  # 对象  # 加载  # 转发给  # 的是  # 重写  # 先用  # 访问控制  # 客户端  # virtual  # std  # display 


相关文章: 建站之星官网登录失败?如何快速解决?  详解jQuery停止动画——stop()方法的使用  移民网站制作流程,怎么看加拿大移民官网?  如何在阿里云域名上完成建站全流程?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  C++如何编写函数模板?(泛型编程入门)  重庆网站制作公司哪家好,重庆中考招生办官方网站?  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何快速配置高效服务器建站软件?  建站之星如何快速解决建站难题?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  专业网站建设制作报价,网页设计制作要考什么证?  常州企业网站制作公司,全国继续教育网怎么登录?  如何通过老薛主机一键快速建站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  创业网站制作流程,创业网站可靠吗?  如何通过服务器快速搭建网站?完整步骤解析  高防服务器:AI智能防御DDoS攻击与数据安全保障  焦点电影公司作品,电影焦点结局是什么?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  建站之星后台管理:高效配置与模板优化提升用户体验  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  如何快速重置建站主机并恢复默认配置?  宿州网站制作公司兴策,安徽省低保查询网站?  开源网站制作软件,开源网站什么意思?  如何通过VPS建站实现广告与增值服务盈利?  实例解析angularjs的filter过滤器  如何在Golang中指定模块版本_使用go.mod控制版本号  如何在建站之星绑定自定义域名?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  php json中文编码为null的解决办法  安云自助建站系统如何快速提升SEO排名?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何通过主机屋免费建站教程十分钟搭建网站?  网站制作的步骤包括,正确网址格式怎么写?  ,sp开头的版面叫什么?  南宁网站建设制作定制,南宁网站建设可以定制吗?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  如何通过西部建站助手安装IIS服务器?  婚礼视频制作网站,学习*后期制作的网站有哪些?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  建站主机无法访问?如何排查域名与服务器问题  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  建站VPS能否同时实现高效与安全翻墙?  昆明网站制作哪家好,昆明公租房申请网上登录入口? 

您的项目需求

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