代理模式的核心是代理对象持有真实对象引用并提供相同接口,将调用转发给真实对象,同时在前后插入额外逻辑;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 (!re
al_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小时内与您取得联系。