享元模式

C++ 享元模式 享元模式(Flyweight Pattern)运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。 阅读详情
GoF对享元模式的描述是:运用共享技术有效地支持大量细粒度的对象。
Flyweight模式是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用。也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。为了调用方便,FlyweightFactory类一般使用Singleton模式实现。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。
Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它。当以下情况成立时使用Flyweight模式:
1 一个应用程序使用了大量的对象。
2 完全由于使用大量的对象,造成很大的存储开销。
3 对象的大多数状态都可以变为外部状态。
4 如果删除对象以外的状态那么可以用相对较少的共享对象取代很多组对象。
5 应用程序不依赖于对象标识。

Java代码 复制代码  收藏代码
  1. //编写享元类   
  2. public class Word(){   
  3.    public void word(){   
  4.        public String content;   
  5.      public String key;   
  6.      public Word(String Content,String key){   
  7.        this.content = content;   
  8.       this.key = key;   
  9.      }   
  10.    }   
  11. }   
  12.   
  13. //管理享元类,用HashMap存储   
  14. public class WordPool{   
  15.     private static HashMap pool=new HashMap();   
  16.   public static Word getWord(String key,String content){   
  17.       Word word = (Word)pool.get(key);   
  18.      if(word == null){   
  19.          word = new Word(key,content);   
  20.             pool.put(key,word);   
  21.      }   
  22.         return word;   
  23.   }   
  24. };   
  25.   
  26. //测试类   
  27. public class test{   
  28.   public static void main(String args[]){   
  29.       Word w1 = WordPool().getWord("刘德华","001");   
  30.      Word w2 = WordPool().getWord("张学友","002");   
  31.      Word w3 = WordPool().getWord("刘德华","001");   
  32.      Word w4 = WordPool().getWord("张学友","002");   
  33.   }   
  34. };  
//编写享元类
public class Word(){
   public void word(){
       public String content;
     public String key;
     public Word(String Content,String key){
       this.content = content;
      this.key = key;
     }
   }
}

//管理享元类,用HashMap存储
public class WordPool{
    private static HashMap pool=new HashMap();
  public static Word getWord(String key,String content){
      Word word = (Word)pool.get(key);
     if(word == null){
         word = new Word(key,content);
            pool.put(key,word);
     }
        return word;
  }
};

//测试类
public class test{
  public static void main(String args[]){
      Word w1 = WordPool().getWord("刘德华","001");
     Word w2 = WordPool().getWord("张学友","002");
     Word w3 = WordPool().getWord("刘德华","001");
     Word w4 = WordPool().getWord("张学友","002");
  }
};


总结:也就是说当有重复的对象时,我们直接调用已经存在的对象,不必要再创建一个新的对象而增大开销!
【银河麒麟服务器操作系统】安装英伟达4090D显卡驱动操作指南 本文详细介绍了在银河麒麟高级服务器操作系统V10SP3-2403-X86版本上安装NVIDIA RTX4090D显卡驱动的完整流程。主要内容包括:准备工作检查、开源驱动禁用、运行级别切换、依赖包安装以及交互式安装过程中的关键选项选择(32位库选Yes、X配置选No)。通过禁用nouveau驱动、重建内核引导等步骤确保驱动安装成功,最后通过nvidia-smi命令验证驱动安装情况。文档提供了操作检查表和安装流程图,帮助用户在银河麒麟系统上顺利完成显卡驱动部署。 阅读详情

相关推荐

ARM Cortex-M系列授权解析:从研发到量产的免费与付费之路

本文深入解析了ARM Cortex-M系列内核从研发到量产过程中的授权模式。研发阶段可利用ARM DesignStart等免费资源进行原型验证,但产品商业化量产则需支付授权费与版税。文章对比了采购商用MCU与自研芯片的成本差异,并探讨了RISC-V作为免费替代方案在IoT领域的应用前景与挑战,为开发者提供了清晰的选型指南。

weixin_29292431的博客 494

实现对象的复用——享元模式

当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高,内存属于计算机的“稀缺资源”,不应该用来“随便浪费”,那么是否存在一种技术可以用于节约内存使用空间,实现对这些相同或者相似对象的共享访问呢?答案

tnt32的专栏 2860

解决rt-thread上使用SPI+DMA

首先阐述下遇到的问题 使用SPI读取icm20602数据,读取频率为1000hz,使用stm32f407主控,发现CPU占用率达到了70%,将此线程注释掉后CPU占用率掉到25%,看来这里要着重优化,便萌生了使用DMA的想法。 使用SPI+DMA要进行的配置 1.开启RTT设备驱动。点击自己的工程 ->RT-Thread Setting2.在board.hzhong3.在board.c文件里加入以下函数,此函数受设备框架调用 void HAL_SPI_MspInit(SPI_HandleTypeDef

响望的博客 8085

深入浅出享元模式

一、引子让我们先来复习下java中String类型的特性:String类型的对象一旦被创造就不可改变;当两个String对象所包含的内容相同的时候,JVM只创建一个String对象对应这两个不同的对象引用。让我们来证实下着两个特性吧(如果你已经了解,请跳过直接阅读第二部分)。先来验证下第二个特性:public class TestPattern {       public sta

跬步致远——Ai92 3万+

【win11】主板更新之后pin不可用,恢复方法

台式机的主板更新了BIOS,再开机竟然登录不进去系统了。 登录界面上显示:【由于此设备上的安全设置已更改,你的pin码不再可用。单击以重新设置pin】 点击【单击以重新设置pin】没有任何反应。 也没有密码登录选项。 在网上找到解决方法,不用PE,只需要按步骤操作即可。通过实际验证可行,现记录如下。

1万+

EEGLAB合辑 | 第一节 往EEGLAB导入数据

1、学习Matlab EEGLAB图形界面建立在强大的Matlab脚本语言之上。要使用EEGLAB构建宏命令和执行自定义和自动化处理的全部功能,就需要能够在Matlab中操纵EEGLAB数据结构。由于时间限制,这个wiki没有提供关于Matlab脚本语言的介绍。相反,用户需要在开始研究之前熟悉Matlab。 2、安装EEGLAB和教程文件 首先下载包含教程数据集的EEGLAB(30MB),附下载地址。 (https://sccn.ucsd.edu/eeglab/downloadtoolbox.php) 解压

nvsirgn的博客 5134

享元模式介绍

享元模式摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,从而让我们能在有限的内存容量中载入更多对象。享元模式要解决的核心问题就是节约内存空间,使用的办法是找出相似对象之间的共有特征,然后复用这些特征。所谓“享元”,顾名思义就是被共享的单元。今天我们就来学习下享元模式。

qq_25409421的博客 1718

三电平逆变器LC滤波设计避坑指南:从SVPWM谐波到Simulink仿真验证

本文详细解析了三电平逆变器LC滤波设计中的关键问题,从SVPWM谐波特性到Simulink仿真验证,提供了800V/10kW系统的参数计算方法和优化技巧。通过实际案例和仿真配置示例,帮助工程师避免常见设计误区,提升电能质量和系统稳定性。

weixin_29261711的博客 173

设计模式——享元模式

享元模式(Flyweight Pattern):主要用于减少创建对象的数量,以减少内存占用和提高性能。在面向对象程序的设计过程中,有时需要创建大量相似的对象实例。如果都创建将会消耗很多系统资源,它是系统性能提高的一个瓶颈。但如果将这些对象的相似部分抽取出来共享,则能节约大量的系统资源,这就是享元模式的产生背景。在 Java 中 String 值的存储就使用了享元模式,相同的值只存一个。 一、基本介绍 1、享元模式(Flyweight Pattern)也叫 “蝇量模式”:运用共享技术有效地支持大量细..

程序猿进阶 2351

CTF逆向实战:如何快速识别RC4、TEA和Base64的魔改变种?

本文针对CTF逆向比赛中常见的加密算法魔改问题,详细讲解了如何快速识别和破解RC4、TEA和Base64的变种。通过分析算法核心特征、常见魔改手法,并结合动态调试与脚本编写等实战技巧,帮助逆向分析人员有效应对算法混淆,提升解题效率。

agile9scrum的博客 783

【Claude Code】Not logged in 未登录错误解决方案 + /login 认证路径

Claude Code 启动时提示 Not logged in 表示当前会话缺少有效凭证。本文从环境变量、API Key 配置、CI 自动化凭证脚本和系统时钟四个维度,提供完整的认证排查流程与修复方案。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 893

JAVA享元模式

JAVA享元模式 通过本文将学习到 1、前言 2、享元模式的概念 3、享元模式的UML图 4、享元模式的实现 5、享有模式的优缺点及使用场景 6、总结 1、前言 “生如夏花之绚烂,死如秋叶之静美”                今天,刚刚得知唐家三少的妻子木子病逝!我想用这句泰戈尔的诗送给他!唐家三少是我看网络小说知道的第一位作者。非常喜欢他描绘的角色,有血有肉。是我青...

帅哥威的博客 7324

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

路~可以走过 3683

实现对象的复用——享元模式(五):单纯、复合享元模式,享元模式总结

14.5 单纯享元模式和复合享元模式标准的享元模式结构图中既包含可以共享的具体享元类,也包含不可以共享的非共享具体享元类。但是在实际使用过程中,我们有时候会用到两种特殊的享元模式:单纯享元模式和复合享元模式,下面将对这两种特殊的享元模式进行简单的介绍:1.单纯享元模式在单纯享元模式中,所有的具体享元类都是可以共享的,不存在非共享具体享元类。单纯享元模式的结构如图14-6所示: 2.复合享元模式将一

爱橙子的OK绷的专栏 2375

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

什么是享元模式?

一、什么是享元模式? 享元模式(Flyweight pattern)又叫轻量级模式,是对象池的一种标签。类似线程池,线程池可以避免不停的创建和销毁对象,消耗系能。享元模式可以减少对象数量,其宗旨是共享细粒度对象,将多个对同一对象的访问集中起来,属于结构型设计模式 二、享元模式的写法极其uml图 1.享元模式的uml图: 主要的3个角色 1.抽象享元角色(IFlyweight): 享元对象抽象基类或接口,同时定义出对象的外部状态和内部状态的接口或实现。 2.具体享元角色(ConcreteFlyweight)

weixin_40980639的博客 4066

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

设计模式——享元模式详解

0. 前言春运买火车票是一件疯狂的事情,同一时刻会有大量的查票请求涌向服务器,服务器必须做出应答来满足我们的购票需求。试想,这些请求包含着大量的重复,比如从A地到B地的车票情况,如果每次都重复创建一个车票查询结果的对象,那么GC任务将非常繁重,影响性能,这就用到了我们的享元模式。...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 5779

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【设计模式】享元模式(轻量级模式) 单纯享元模式和复合享元模式

享元模式是一种结构型设计模式,通过共享技术实现相同或相似对象的重用,以减少内存占用和提高性能。它将对象分为内部状态(可共享)和外部状态(不可共享),通过享元池管理共享对象。典型应用场景包括字符串池、缓存管理、游戏开发等。该模式通过分离对象内部和外部状态,让多个对象共享相同的内部状态,减少对象创建数量。代码示例展示了如何用享元模式优化文本编辑器字体样式管理,通过工厂类缓存和复用相同样式的字符对象,验证了共享实例的实现效果。

weixin_44131922的博客 1044

[设计模式]享元模式

github地址:https://github.com/1711680493 点我进入github 如需了解更多设计模式,请进入我的设计模式专栏 享元模式 运用共享技术来有效地支持大量细粒度对象的复用. 它通过共享已经存在的对象来大幅度减少需要创建的对象数量,避免大量相似类的开销,从而提高系统资源的利用率 优点 相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中...

砷碲 - Shendi 6854

android中的享元模式,Android 享元模式

一、前言享元模式即:Flyweight,它是对象池的一种实现。享元模式用来尽可能的减少内存的使用量。多用于存在大量重复对象的场景,或需要缓冲池的时候。用来缓存共享的对象。这样来避免内存移除等。二、定义运用共享技术有效的支持大量细粒度的对象。三、例子现在我们大概了解了什么是享元模式,概念再多不如一个简单例子来的痛快。下面我讲解一个查询巴士车票的例子来讲解什么是享元模式。3.1、定义巴士车票publi...

weixin_28799111的博客 419
上一篇: 设计模式之Facade
下一篇: Builder模式
haoxingfengcrazy
博客等级 码龄20年 156粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值