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

享元模式(C++)

定义:享元模式是一种结构型设计模式,它使用共享对象,用以尽可能减少内存使用和提高性能。享元模式通过共享已经存在的对象实例,而不是每次需要时都创建新对象实例,从而避免大量重复对象的开销。

对比:

        单例模式对比:两者都限制了对象的创建,不同之处在于单例模式全局只有一个实例,而享元模式会在状态相同时共享同一个实例。

        与原型模式对比:虽然原型模式不涉及状态的共享,但通过现有对象来创建一个新对象,达到了新对象和原对象“内容”上的一致。在实现原型模式时,根据场景也可以使用享元模式来优化对象的存储和创建过程。

        代码:

// 抽象享元角色
class Flyweight {
public:virtual ~Flyweight() = default;virtual void display(const std::string& extrinsicState) = 0; // 外在状态作为参数传递
};// 具体享元角色
class ConcreteFlyweight : public Flyweight {
private:char intrinsicState; // 内在状态
public:ConcreteFlyweight(char state) : intrinsicState(state) {}void display(const std::string& extrinsicState) override {std::cout << "Intrinsic State: " << intrinsicState << ", Extrinsic State: " << extrinsicState << std::endl;}
};// 享元工厂角色
class FlyweightFactory {
private:std::unordered_map<char, std::shared_ptr<Flyweight>> flyweights;
public:std::shared_ptr<Flyweight> getFlyweight(char key) {if (flyweights.find(key) == flyweights.end()) {flyweights[key] = std::make_shared<ConcreteFlyweight>(key);}return flyweights[key];}
};// 客户端角色
class Client {
private:std::shared_ptr<FlyweightFactory> factory;
public:Client(std::shared_ptr<FlyweightFactory> f) : factory(f) {}void execute(char key, const std::string& extrinsicState) {std::shared_ptr<Flyweight> flyweight = factory->getFlyweight(key);flyweight->display(extrinsicState);}
};int main() {std::shared_ptr<FlyweightFactory> factory = std::make_shared<FlyweightFactory>();Client client(factory);client.execute('A', "Position (10, 20)");client.execute('B', "Position (15, 25)");client.execute('A', "Position (20, 30)"); // 'A' 是共享的,所以使用相同的实例return 0;
}

相关文章:

享元模式(C++)

定义&#xff1a;享元模式是一种结构型设计模式&#xff0c;它使用共享对象&#xff0c;用以尽可能减少内存使用和提高性能。享元模式通过共享已经存在的对象实例&#xff0c;而不是每次需要时都创建新对象实例&#xff0c;从而避免大量重复对象的开销。 对比&#xff1a; 与单…...

开发一个UniApp需要多长时间

开发一个UniApp所需的时间因项目的规模、复杂度、开发团队的经验水平以及开发过程中的需求变更等多种因素而异。因此&#xff0c;很难给出一个确切的时间范围。然而&#xff0c;我们可以从以下几个方面来大致估算开发时间&#xff1a; 项目规划与需求分析&#xff1a; 在项目开…...

服务器源IP暴露后的安全风险及防御措施

在互联网安全领域&#xff0c;服务器的源IP地址泄露可能成为黑客攻击的切入点。本文将列举十种常见的攻击类型&#xff0c;并提供相应的防御建议&#xff0c;帮助管理员们更好地保护服务器免受潜在威胁。 一、引言 服务器源IP地址的暴露意味着攻击者可以直接针对服务器发起攻击…...

YoloV8改进策略:BackBone改进|CAFormer在YoloV8中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入YoloV8模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…...

网络编程(19)——C++使用asio协程实现并发服务器

十九、day19 上一节学习了如果通过asio协程实现一个简单的并发服务器demo&#xff08;官方案例&#xff09;&#xff0c;今天学习如何通过asio协程搭建一个比较完整的并发服务器。 主要实现了AsioIOServicePool线程池、逻辑层LogicSystem、粘包处理、接收协程、发送队列、网络…...

【SQL】深入了解 SQL 索引:数据库性能优化的利器

目录 引言1. 什么是 SQL 索引&#xff1f;1.1 索引的基本概念1.2 索引的优缺点 2. 索引的工作原理2.1 B 树索引2.2 哈希索引2.3 全文索引 3. 索引创建方式3.1 单列索引示意图3.2 复合索引示意图3.3 唯一索引示意图 4. 如何创建索引4.1 创建单列索引4.2 创建唯一索引4.3 创建全文…...

河道垃圾数据集 水污染数据集——无人机视角数据集 共3000张图片,可直接用于河道垃圾、水污染功能检测 已标注yolo格式、voc格式,可直接训练;

河道垃圾数据集 水污染数据集——无人机视角数据集 共3000张图片&#xff0c;可直接用于河道垃圾、水污染功能检测 已标注yolo格式、voc格式&#xff0c;可直接训练&#xff1b; 河道垃圾与水污染检测数据集&#xff08;无人机视角&#xff09; 项目概述 本数据集是一个专门用…...

[棋牌源码] 2023情怀棋牌全套源代码含多套大厅UI及600+子游源码下载

降维打击带来的优势 这种架构不仅极大提升了运营效率&#xff0c;还降低了多端维护的复杂性和成本。运营商无需投入大量资源维护多套代码&#xff0c;即可实现产品的全终端覆盖和快速更新&#xff0c;这就是产品层面的降维打击。 丰富的游戏内容与多样化大厅风格 类型&#…...

深度学习:预训练模型(基础模型)详解

预训练模型&#xff08;基础模型&#xff09;详解 预训练模型&#xff08;有时也称为基础模型或基准模型&#xff09;是机器学习和深度学习领域中一个非常重要的概念&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;、计算机视觉等领域。这些模型通过在大规模数据…...

欧科云链研究院深掘链上数据:洞察未来Web3的隐秘价值

目前链上数据正处于迈向下一个爆发的重要时刻。 随着Web3行业发展&#xff0c;公链数量呈现爆发式的增长&#xff0c;链上积聚的财富效应&#xff0c;特别是由行业热点话题引领的链上交互行为爆发式增长带来了巨量的链上数据&#xff0c;这些数据构筑了一个行为透明但与物理世…...

国外电商系统开发-运维系统登录阈值

为了登录安全&#xff0c;在登录验证的时候&#xff0c;如果一个IP连续登录的次数超过5次&#xff0c;那么系统则会拒绝这个IP的所有登录&#xff0c;而不管密码是否正确&#xff0c;就像是银行卡一样。 设置登录阈值&#xff1a; 注意&#xff1a;如果您的IP不幸被系统锁定&am…...

设备台账管理是什么

设备管理对企业至关重要。比如在电子加工企业&#xff0c;高效的设备管理能减少设备故障&#xff0c;提升生产效率&#xff0c;为企业赢得市场竞争优势。设备台账管理作为设备管理的一个核心部分&#xff0c;起着重要的作用。 让我们一起从本篇文章中探索设备台账管理是什么&a…...

操作教程|基于DataEase用RFM分析法分析零售交易数据

DataEase开源BI工具可以在店铺运营的数据分析及可视化方面提供非常大的帮助。同样&#xff0c;在用于客户评估的RFM&#xff08;即Recency、Frequency和Monetary的简称&#xff09;分析中&#xff0c;DataEase也可以发挥出积极的价值&#xff0c;通过数据可视化大屏的方式实时展…...

使用Go语言的gorm框架查询数据库并分页导出到Excel实例

文章目录 基本配置配置文件管理命令行工具: Cobra快速入门基本用法 生成mock数据SQL准备gorm自动生成结构体代码生成mock数据 查询数据导出Excel使用 excelize实现思路完整代码参考 入口文件效果演示分页导出多个Excel文件合并为一个完整的Excel文件 完整代码 基本配置 配置文…...

Run the FPGA VI 选项的作用

Run the FPGA VI 选项的作用是决定当主机 VI 运行时&#xff0c;FPGA VI 是否会自动运行。 具体作用&#xff1a; 勾选 “Run the FPGA VI”&#xff1a; 当主机 VI 执行时&#xff0c;如果 FPGA VI 没有正在运行&#xff0c;系统将自动启动并运行该 FPGA VI。 这可以确保 FPG…...

新手入门怎么炒股,新手炒股入门需要做哪些准备?

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…...

Fetch 与 Axios:JavaScript HTTP 请求库的详细比较

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

记录一个Ajax发送JSON数据的坑,后端RequestBody接收参数小细节?JSON对象和JSON字符串的区别?

上半部分主要介绍我实际出现的问题&#xff0c;最终下面会有总结。 起因&#xff1a;我想发送post请求的data&#xff0c;但是在浏览器中竟然被搞成了地址栏编码 如图前端发送的ajax请求数据 如图发送的请求体&#xff1a; 很明显是keyvalue这种形式&#xff0c;根本就不是…...

【智能算法应用】长鼻浣熊优化算法求解二维路径规划问题

摘要 本文采用长鼻浣熊优化算法 (Coati Optimization Algorithm, COA) 求解二维路径规划问题。COA 是一种基于长鼻浣熊的觅食和社群行为的智能优化算法&#xff0c;具有快速收敛性和较强的全局搜索能力。通过仿真实验&#xff0c;本文验证了 COA 在复杂环境下的路径规划性能&a…...

微服务中的负载均衡算法与策略深度解析

在微服务架构中&#xff0c;负载均衡是保证系统高可用性和高性能的关键技术。通过合理地将请求分配给多个服务实例&#xff0c;负载均衡策略可以优化资源利用&#xff0c;实现请求的均衡处理。本文将深入探讨微服务中的负载均衡算法及其配置策略&#xff0c;帮助读者更好地理解…...

EverythingPowerToys自定义程序集成:扩展外部应用打开方式的完整教程

EverythingPowerToys自定义程序集成&#xff1a;扩展外部应用打开方式的完整教程 【免费下载链接】EverythingPowerToys Everything search plugin for PowerToys Run 项目地址: https://gitcode.com/gh_mirrors/ev/EverythingPowerToys EverythingPowerToys是一款强大的…...

零代码操作!FUTURE POLICE亮色界面详解:从上传到下载SRT全流程

零代码操作&#xff01;FUTURE POLICE亮色界面详解&#xff1a;从上传到下载SRT全流程 1. 认识FUTURE POLICE&#xff1a;高精度字幕对齐工具 你是否遇到过这样的困扰&#xff1f;精心制作的视频字幕总是与语音不同步&#xff0c;手动调整时间轴既耗时又费力。FUTURE POLICE正…...

如何让Windows任务栏变透明?TranslucentTB完整教程指南

如何让Windows任务栏变透明&#xff1f;TranslucentTB完整教程指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要为你的Windows桌面…...

Scarab:重新定义空洞骑士模组管理体验

Scarab&#xff1a;重新定义空洞骑士模组管理体验 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 在独立游戏模组管理领域&#xff0c;手动复制文件、解决版本冲突和跟踪更新的…...

春节不用愁对联:春联生成模型实战,3步生成专属春联

春节不用愁对联&#xff1a;春联生成模型实战&#xff0c;3步生成专属春联 1. 传统年味遇上AI科技 每到春节&#xff0c;家家户户贴春联是延续千年的传统习俗。一副好春联既要对仗工整&#xff0c;又要寓意吉祥&#xff0c;还要符合自家特色&#xff0c;这让不少人为之头疼。…...

告别调参玄学:在GID遥感数据集上优化DeeplabV3+的5个实战技巧

告别调参玄学&#xff1a;在GID遥感数据集上优化DeeplabV3的5个实战技巧 遥感影像分割一直是计算机视觉领域的难点任务&#xff0c;尤其是面对GID这类包含复杂地物边界和多尺度目标的数据集时。许多研究者在初步跑通DeeplabV3模型后&#xff0c;往往会陷入mIoU指标停滞不前的困…...

Python多线程/多进程内存爆炸真相:GIL锁外的隐性开销、共享对象深拷贝黑洞与零拷贝迁移方案

第一章&#xff1a;Python智能体内存管理策略入门导论Python智能体&#xff08;如基于LLM的Agent、ReAct架构或Tool-Calling系统&#xff09;在运行过程中频繁创建、传递与销毁对象&#xff0c;其内存行为远超普通脚本应用。理解CPython底层的引用计数、循环垃圾回收&#xff0…...

Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成

Qwen3-0.6B-FP8模型服务化&#xff1a;使用Git进行版本管理与CI/CD集成 1. 引言 咱们做AI模型部署的&#xff0c;是不是经常遇到这种烦心事&#xff1a;好不容易把模型服务调通了&#xff0c;过两天想加点新功能&#xff0c;结果发现原来的配置参数、客户端代码、甚至API封装…...

用MNN实现手机端AI绘画:Android Studio集成与模型量化实战

用MNN实现手机端AI绘画&#xff1a;Android Studio集成与模型量化实战 移动端AI应用正在经历爆发式增长&#xff0c;其中AI绘画因其创意性和实用性成为开发者关注的热点。本文将手把手教你如何通过阿里开源的MNN框架&#xff0c;在Android应用中实现高性能的AI绘画功能。不同于…...

Gemma-3-12b-it镜像免配置实战:单命令启动多模态服务并集成Flask API

Gemma-3-12b-it镜像免配置实战&#xff1a;单命令启动多模态服务并集成Flask API 1. 快速了解Gemma-3-12b-it多模态能力 Gemma-3-12b-it是Google推出的轻量级多模态模型&#xff0c;它最大的特点就是能同时理解文字和图片。想象一下&#xff0c;你给它一张照片&#xff0c;它…...