《享元模式(极简c++)》

news/2024/5/3 19:03:22
        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客

模式说明
  • 方案:享元模式是一种结构型设计模式,旨在通过共享尽可能多的对象来最小化内存使用和提高性能。
    • 优点
      • 减少内存占用:通过共享相似对象的状态,减少了对象的数量,从而减少了内存消耗。
      • 提高性能:由于减少了对象的数量,降低了系统的负担,提高了系统的性能。
    • 缺点
      • 复杂性增加:实现享元模式可能需要引入额外的复杂性,例如维护共享对象的状态等。

本质思想:将对象分为可共享的内部状态和不可变的外部状态,通过共享内部状态来减少对象的数量,以节省内存和提高性能。

实践建议:在有大量相似对象时,且相似部分状态不变时使用(如果要变。则需要对象提供的接口全部线程安全,则有性能风险,需要慎重)

代码示例

#include <iostream>
#include <string>
#include <unordered_map>// 抽象享元类
class Bird {
public:virtual void fly() const = 0;
};// 具体享元类
class ConcreteBird : public Bird {
private:std::string type_;
public:ConcreteBird(const std::string& type) : type_(type) {}void fly() const override {std::cout << "A " << type_ << " is flying!" << std::endl;}
};// 享元工厂类
class FlyweightFactory {
private:std::unordered_map<std::string, const Bird*> birds;
public:const Bird* getBird(const std::string& type) {auto it = birds.find(type);if (it == birds.end()) {// 如果不存在该类型的鸟,创建新的鸟对象birds[type] = new ConcreteBird(type);return birds[type];}return it->second;}~FlyweightFactory() {for (auto& pair : birds) {delete pair.second; // 释放内存}birds.clear();}
};int main() {FlyweightFactory factory;const Bird* bird1 = factory.getBird("sparrow");const Bird* bird2 = factory.getBird("sparrow");bird1->fly(); // 输出:A sparrow is flying!bird2->fly(); // 输出:A sparrow is flying!// 之后可以把bird1和bird2传递给其他对象,实现共享return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11253.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

增强现实(AR)在广告中的力量

The Power of AR in Advertising 写在前面 增强现实&#xff08;AR -Augmented Reality&#xff09;是指借助软件、应用程序和智能手机、平板电脑或耳机等设备&#xff0c;为日常生活添加视觉和音频元素的技术。如今&#xff0c;品牌和广告商可以在营销活动中使用AR&#xff0…

【MATLAB源码-第172期】基于matlab的小波变换能量率BP神经网络的机械轴承故障分析以及识别,附带程序说明。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在现代工业生产中&#xff0c;轴承是最为常见和关键的机械基础部件之一&#xff0c;其性能状态直接影响着整个机械系统的稳定性和可靠性。由于轴承在运行过程中不断承受高负荷和摩擦&#xff0c;故障发生的概率相对较高。轴承…

ESCTF-逆向赛题WP

ESCTF_reverse题解 逆吧腻吧babypybabypolyreeasy_rere1你是个好孩子完结撒花 Q_W_Q 逆吧腻吧 下载副本后无壳&#xff0c;直接拖入ida分析分析函数逻辑&#xff1a;ida打开如下&#xff1a;提取出全局变量res的数据后&#xff0c;编写异或脚本进行解密&#xff1a; a[0xBF, …

数据结构面试常见问题

什么是数据结构&#xff1f; 数据结构是组织数据的一种方式&#xff0c;以便可以有效地使用数据。不同类型的数据结构适用于不同类型的应用程序&#xff0c;有些则高度专业化&#xff0c;适用于特定任务。例如&#xff0c;B 树特别适合数据库的实现&#xff0c;而编译器实现通…

推荐几个python的工具

Beautiful Soup Beautiful Soup用于清理和提取HTML和XLM中的数据。 它用于解析HTML文本&#xff0c;并允许数据科学家将文本数据转换为结构化数据&#xff0c;只需几行代码&#xff0c;就可以提取复杂的HTML数据。在某些情况下&#xff0c;您只需要一个表标签&#xff0c;并且…

ios ipa包上传需要什么工具

目录 ios ipa包上传需要什么工具 前言 一、IPA包的原理 二、IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iT…