当前位置: 首页 > 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;使得同样的构建过程可以创建不同的对象…...

VSCode光标主题定制指南:从颜色令牌到扩展开发

1. 项目概述&#xff1a;一个为开发者定制的光标主题集合如果你和我一样&#xff0c;每天有超过8小时的时间都泡在代码编辑器里&#xff0c;那么你一定会对编辑器里那个千篇一律的、闪烁的竖线光标感到审美疲劳。warrenwoodhouse/cursors这个项目&#xff0c;就是来解决这个“小…...

终极指南:Windows平台APK安装器如何让安卓应用无缝运行

终极指南&#xff1a;Windows平台APK安装器如何让安卓应用无缝运行 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows电脑上运行安卓应用曾经是一个技术难题&am…...

构建本地化个人助理系统:事件驱动架构与模块化设计实践

1. 项目概述&#xff1a;一个高度可定制的个人助理系统最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Personal-Assistant”&#xff0c;作者是idk-man69。光看名字&#xff0c;你可能会觉得这又是一个类似Siri或Google Assistant的语音助手&#xff0c;但点进去仔细研…...

移动端大语言模型本地部署:从模型轻量化到推理引擎实战

1. 项目概述&#xff1a;当GPT遇见移动端&#xff0c;一个开源项目的诞生最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫Taewan-P/gpt_mobile。光看名字&#xff0c;你大概就能猜到它的核心&#xff1a;把类似GPT这样的大语言模型&#xff08;LLM&…...

Boss直聘职位数据自动化采集:Python爬虫架构设计与工程实践

1. 项目概述与核心价值最近在技术社区里&#xff0c;看到不少朋友在讨论一个叫longsizhuo/BossZhiPin_Job_Search的项目。光看名字&#xff0c;你大概就能猜到&#xff0c;这是一个跟“Boss直聘”和“职位搜索”相关的自动化工具。作为一个在招聘数据分析和自动化领域摸爬滚打了…...

如何在Mac上轻松导出微信聊天记录:WeChatExporter完整指南

如何在Mac上轻松导出微信聊天记录&#xff1a;WeChatExporter完整指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而焦虑&#xff1f…...

通达信数据解析终极指南:mootdx让金融数据获取变得如此简单

通达信数据解析终极指南&#xff1a;mootdx让金融数据获取变得如此简单 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在金融数据分析和量化交易的世界里&#xff0c;获取准确、完整的市场数据是…...

低多边形≠简陋!掌握这7个结构化Prompt技巧,3分钟产出可商用IP形象(附Figma网格对齐校验表)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;低多边形设计的认知革命&#xff1a;从“简陋感”到“结构化美学” 低多边形&#xff08;Low-Poly&#xff09;设计曾长期被误读为建模能力不足的妥协产物&#xff0c;但其本质是一场对数字视觉语法的系…...

Supabase AI Agent技能库:安全集成数据库操作与边缘函数调用

1. 项目概述&#xff1a;当Supabase遇上AI Agent&#xff0c;一个技能库的诞生最近在捣鼓AI Agent应用开发&#xff0c;发现一个挺有意思的现象&#xff1a;大家都能用LangChain、LlamaIndex这些框架快速搭出个Agent的架子&#xff0c;但真想让这个Agent去干点具体、有用的活儿…...

别再只盯着CSI-2了!用示波器实测MIPI D-PHY波形,手把手教你排查Camera不通的硬件问题

别再只盯着CSI-2了&#xff01;用示波器实测MIPI D-PHY波形&#xff0c;手把手教你排查Camera不通的硬件问题 调试Camera模块时&#xff0c;MIPI信号问题往往是硬件工程师最头疼的挑战之一。当系统出现图像异常、花屏或无法识别时&#xff0c;大多数工程师的第一反应是检查CSI-…...