当前位置: 首页 > news >正文

C++ 设计模式:代理模式(Proxy Pattern)

链接:C++ 设计模式
链接:C++ 设计模式 - 门面模式
链接:C++ 设计模式 - 中介者
链接:C++ 设计模式 - 适配器

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。代理模式可以在不改变目标对象的情况下,通过代理对象来控制对目标对象的访问。

1.问题分析

在开发中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理、控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。

2.实现步骤

  1. 定义抽象主题接口:定义目标对象和代理对象的共同接口。
  2. 定义真实主题类:实现抽象主题接口,定义目标对象的具体行为。
  3. 定义代理类:实现抽象主题接口,包含对真实主题对象的引用,控制对真实主题对象的访问。
  4. 客户端代码:通过代理对象来访问目标对象的功能。

3.代码示例

假设传感器的初始化过程可能涉及复杂的硬件配置、校准、数据加载等操作,这些操作可能需要较长的时间。如果在系统启动时同步初始化所有传感器,可能会导致系统资源紧张,影响其他任务的执行。这可以采用延迟初始化的方式,来缓解对系统性能的影响。

3.1.定义抽象主题接口

class Sensor {public:virtual ~Sensor() = default;virtual void readData() = 0;
};

3.2.定义真实主题类

class RealSensor : public Sensor {public:RealSensor() { initialize(); }void readData() override { std::cout << "Reading sensor data..." << std::endl; }private:void initialize() {std::cout << "Initializing sensor..." << std::endl;// 模拟初始化开销}
};

3.3.定义代理类

class ProxySensor : public Sensor {public:ProxySensor() : realSensor_(nullptr) {}void readData() override {if (!realSensor_) {realSensor_ = std::make_unique<RealSensor>();}realSensor_->readData();}private:std::unique_ptr<RealSensor> realSensor_;
};

3.4.客户端代码

int main() {std::unique_ptr<Sensor> sensor = std::make_unique<ProxySensor>();// 传感器尚未初始化std::cout << "Sensor not initialized yet." << std::endl;// 第一次读取传感器数据,传感器将被初始化sensor->readData();// 第二次读取传感器数据,传感器不需要再次初始化sensor->readData();return 0;
}

相关文章:

C++ 设计模式:代理模式(Proxy Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 门面模式 链接&#xff1a;C 设计模式 - 中介者 链接&#xff1a;C 设计模式 - 适配器 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它为其他对象提供一种代理以控制&#xff08…...

JDK、JRE、JVM的区别

JDK&#xff08;Java Development Kit&#xff09;、JRE&#xff08;Java Runtime Environment&#xff09;和 JVM&#xff08;Java Virtual Machine&#xff09;是 Java 开发和运行环境的三个重要组成部分。 JDK 是 Java 开发工具包&#xff0c;它包含了编译器&#xff08;ja…...

2021年福建公务员考试申论试题(县级卷)

2021年福建公务员考试申论试题&#xff08;县级卷&#xff09; 材料一 “把她的家粉刷一新。给独自生活的她更多支持。”   某公益平台上&#xff0c;为女孩小珊修缮房屋的公益计划得到不少爱心网友的支持。1元、10元、100元……不到一个月&#xff0c;爱心捐赠就超过了修缮…...

问题记录:[FATAL] [1735822984.951119148]: Group ‘manipulator‘ was not found.

前言&#xff1a;最近仿照UR5手眼标定的例程&#xff0c;在新的机械臂上进行手眼标定&#xff0c;还准备用easy_hand手眼标定包。将机器人功能包导入到工作空间后进行编译运行&#xff0c;启动launch文件&#xff1a; roslaunch easy_handeye eye_to_hand_CR7_calibration.lau…...

【大模型实战篇】Mac本地部署RAGFlow的踩坑史

1. 题外话 最近一篇文章还是在11月30日写的&#xff0c;好长时间没有打卡了。最近工作上的事情特别多&#xff0c;主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed&#xff0c;后续会带来一些分享。今天的文章主要聚焦在RAG。 近期调研了一系…...

iOS 修改图片颜色

需求中会遇到这种情况&#xff0c;就是我们需要的图片是已经有的 但是图片的颜色不符合我们的需求&#xff0c;但是又不想再切新的图片了&#xff0c;这个时候&#xff0c;我们可以使用代码的方式修改图片的颜色&#xff0c;达到同样的效果 关键代码就是 [image imageWithRend…...

OceanBase到MySQL实时同步方案

概述 本方案基于OceanBase Binlog服务&#xff0c;采用数据库实时复制软件Beedup订阅捕获OceanBase数据库的Binlog事件&#xff0c;复制软件将Binlog事件还原为MySQL支持的DML或DDL&#xff0c;然后交由MySQL数据库执行。 配置Binlog任务 启用OceanBase Binlog服务&#xff…...

信息系统项目管理师——第8章章 项目整合管理 笔记

8 项目整合管理&#xff08;最后反过来看&#xff09; 项目整合过程&#xff1a;①制定项目章程&#xff08;启动过程&#xff09;、②制订项目管理计划&#xff08;规划过程&#xff09;、③指导和管理项目工作、管理项目知识&#xff08;执行过程&#xff09;、④监控项目工…...

最好用的图文识别OCR -- PaddleOCR(1) 快速集成

最近在项目中遇到了 OCR 的需求&#xff0c;希望能够实现高效而准确的文字识别。由于预算限制&#xff0c;我并未选择商业付费方案&#xff0c;而是优先尝试了开源工具。一开始&#xff0c;我测试了 GOT-OCR2.0&#xff0c;但由于我的 Mac 配置较低&#xff0c;不支持 GPU 运算…...

Unity制作3D场景的脑电运动想象范式(左右手抓握)

使用Unity制作3D场景中的运动想象范式 3D技术可以创建出立体的图像和环境&#xff0c;给用户带来更加真实和沉浸式的体验&#xff0c;本文介绍了一种可控的左右手运动的3D场景范式的设计流程&#xff0c;用于被试在3D场景下完成运动想象脑电信号数据的采集。 目录 1.制作动画…...

python23-常用的第三方库01:request模块-爬虫

requests 模块是 Python 中的一个第三方库&#xff0c;用于发送 HTTP 请求。 它提供了一个简单且直观的 API&#xff0c;使得发送网络请求和解析响应变得非常容易。requests 模块支持各种 HTTP 方法&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并且具有处理 cookies…...

CAT3D: Create Anything in 3D with Multi-View Diffusion Models 论文解读

24年5月的论文&#xff0c;上一版就是ReconFusion 目录 一、概述 二、相关工作 1、2D先验 2、相机条件下的2D先验 3、多视角先验 4、视频先验 5、前馈方法 三、Method 1、多视角扩散模型 2、新视角生成 3、3D重建 一、概述 该论文提出一种CAT3D方法&#xff0c;实现…...

持续学习入门

参考视频&#xff08;一&#xff09; 【学无止境&#xff1a;深度连续学习】 背景 更新新的数据时&#xff0c;数据异步输入&#xff0c;会有灾难性遗忘 现有解决策略 &#xff08;1&#xff09;引入正则约束&#xff08;2&#xff09;设计合适的动态模型架构 &#xff…...

天猫推荐数据集实践

参考自 https://github.com/xufengtt/recom_teach_code&#xff0c;学习记录。 环境配置&#xff08;maxcomputedataworks&#xff09; 下载天猫推荐数据集&#xff1b;开启 aliyun 的 maxcompute&#xff0c;dataworks&#xff0c;pai&#xff1b;使用 odpscmd 上传本地数据…...

《Vue3实战教程》33:Vue3路由

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 路由​ 客户端 vs. 服务端路由​ 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时&#xff0c;浏览器会从服务端获得全新的 HTML&…...

【大模型系列】MultiUI(2024.11)

Paper&#xff1a;https://arxiv.org/pdf/2410.13824Github&#xff1a;https://neulab.github.io/MultiUI/Author&#xff1a;Junpeng Liu et al., 卡内基梅隆 核心1&#xff1a; 先基于text-based LLMs获取网页的accessibility tree(辅助功能树&#xff0c;https://200t.w3c…...

「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统

本篇教程将实现一个模拟火车票查询系统&#xff0c;通过输入条件筛选车次信息&#xff0c;并展示动态筛选结果&#xff0c;学习事件处理、状态管理和界面展示的综合开发技巧。 关键词 条件筛选动态数据展示状态管理UI交互查询系统 一、功能说明 模拟火车票查询系统包含以下功…...

Dubbo 核心知识全解析:原理、流程与关键机制

1.说说一次 Dubbo 服务请求流程&#xff1f; Dubbo 是一个分布式服务框架&#xff0c;它简化了基于 SOA&#xff08;面向服务架构&#xff09;的应用程序的开发。一次典型的 Dubbo 服务请求流程如下&#xff1a; 服务提供者启动: 服务提供者启动后&#xff0c;会向注册中心注册…...

时间序列预测算法---LSTM

目录 一、前言1.1、深度学习时间序列一般是几维数据&#xff1f;每个维度的名字是什么&#xff1f;通常代表什么含义&#xff1f;1.2、为什么机器学习/深度学习算法无法处理时间序列数据?1.3、RNN(循环神经网络)处理时间序列数据的思路&#xff1f;1.4、RNN存在哪些问题? 二、…...

二十三种设计模式-建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种分步骤构建复杂对象的方法。这种模式允许你通过相同的创建过程构建不同的表示。建造者模式将一个复杂对象的构建与其表示分离&#xff0c;使得同样的构建过程可以创建不同的对象…...

CodeSys自定义HTML5控件:从零构建到工程部署的实战指南

1. 为什么需要自定义HTML5控件&#xff1f; 在工业自动化领域&#xff0c;CodeSys作为主流的PLC编程环境&#xff0c;其WebVisu功能允许工程师创建可视化界面。但默认控件库往往无法满足特定需求&#xff0c;比如&#xff1a; 需要展示实时数据曲线图而非简单数值要求特殊交互…...

手把手教你用PassFab for Office 8.5.1找回遗忘的Word/Excel密码(保姆级图文教程)

办公文档密码遗忘急救指南&#xff1a;PassFab for Office全流程实战解析 你是否经历过这样的场景&#xff1a;周一早晨准备修改季度报表时&#xff0c;突然发现去年设置的Excel密码怎么试都不对&#xff1b;或是毕业论文答辩前夜&#xff0c;重要参考文献的Word文档因密码错误…...

Z-Image-Turbo-辉夜巫女实战教程:结合ControlNet实现辉夜巫女姿势精准控制

Z-Image-Turbo-辉夜巫女实战教程&#xff1a;结合ControlNet实现辉夜巫女姿势精准控制 1. 快速了解Z-Image-Turbo-辉夜巫女模型 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的Lora版本&#xff0c;专门针对生成辉夜巫女风格图片进行了优化。这个模型能够根据文字描述快速…...

Pixiv -直连-手机电脑全平台可用,聚合多个资源一站搞定

功能特点 全平台支持&#xff1a;兼容 Android、iOS、Windows 和 macOS 系统&#xff0c;覆盖主流设备。直连访问&#xff1a;内置优化网络链路&#xff0c;绕过访问限制&#xff0c;无需额外配置或登录即可加载内容。无广告体验&#xff1a;去除官方客户端的广告干扰&#xf…...

YOLO26改进策略【卷积层】| arXiv 2025 加权卷积Weighted Conv 密度函数提表征 + 零参扩展降负担,提升目标检测精度

一、本文介绍 本文记录的是利用加权卷积改进 YOLO26 的卷积层特征提取部分。 Weighted Convolution(加权卷积)通过空间密度函数与标准卷积核加权结合,实现YOLO26特征提取中像素位置依赖的差异化权重分配。本文利用Weighted Convolution算子,通过对称衰减的密度函数强化中…...

漫画翻译效率提升300%:深度学习辅助工具实战指南

漫画翻译效率提升300%&#xff1a;深度学习辅助工具实战指南 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址: https://git…...

3步构建智能文献管理系统:Zotero GPT插件从配置到精通指南

3步构建智能文献管理系统&#xff1a;Zotero GPT插件从配置到精通指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 在信息爆炸的学术环境中&#xff0c;研究人员平均每天需要处理超过20篇文献&#xff0c;传…...

2026 年电子邮件认证部署缺陷与安全风险治理研究

摘要 电子邮件作为网络攻击最主要入口&#xff0c;域名伪造与商业邮件欺诈&#xff08;BEC&#xff09;持续威胁机构安全。SPF、DKIM、DMARC 作为抵御邮件伪造的核心协议已提出十余年&#xff0c;但大量组织仍存在认知不足、配置错误、长期停留在监控模式等问题&#xff0c;导致…...

手把手教你用Transceiver Wizard搞定UltraScale FPGA的GTY时钟网络规划

手把手教你用Transceiver Wizard搞定UltraScale FPGA的GTY时钟网络规划 在FPGA高速收发器设计中&#xff0c;时钟网络的合理规划往往是决定系统稳定性的关键因素。对于刚接触Xilinx UltraScale架构的开发者来说&#xff0c;GTY收发器的时钟分配规则就像一座迷宫——相邻Bank共享…...

React Overdrive与Next.js集成:构建流畅页面过渡

React Overdrive与Next.js集成&#xff1a;构建流畅页面过渡 【免费下载链接】react-overdrive Super easy magic-move transitions for React apps 项目地址: https://gitcode.com/gh_mirrors/re/react-overdrive React Overdrive是一款为React应用提供超简单魔法移动过…...