【设计模式学习笔记】享元模式

设计模式学习笔记--享元模式 一.简介 今天来学习一下享元模式,英文名字叫flyweight pattern,字面上看是轻量级的意思,还是感觉中文翻译比较好理解。所谓享元,就是共享相同部分的意思。当我们在设计一个游戏的时候,比如我们要在场景中绘制三个相同的人物模型,如果我们直接创建三个一样的人物模型对象并绘制,那么我们就需要每次都读入人物模型相关的网格信息+贴图材质信息,很明显,这些东西只要有一份就可以了,而唯一不同 阅读详情

享元模式:主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。【菜鸟】

文章目录

          1.1 宝马车长这样

          1.2 工厂是这样涂装的

          1.3 涂涂涂

          1.4 结果

          参考

 这个模式也比较简单。比如我们要生产相同型号,但涂装不同的宝马。我们生产了黑色宝马后,还有必要再去实例化一个宝马,再去设置它的型号吗?我们是不是直接换一下颜色就可以了?
怎么说呢,你可以理解为直接setColor就生产了另外一辆宝马。

这里我们为了好看,还是使用工厂去生产宝马,同时呢引入一个map用于存放我们已经生产的不同类型的宝马,当我们需要更换涂装时,直接从map中取出对应的型号,涂一下就好了。

 1.1 宝马车长这样

package flyweight;

/************************************************
 *@ClassName : BWMCar
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:14】
 *@Version : 1.0.0
 *************************************************/

public class BWMCar {
    private String name;
    private String color;

    public BWMCar(String name, String color) {
        this.name = name;
        this.color = color;
    }
}



1.2 工厂是这样涂装的

map就相当于是仓库,当你发现有个对应的车型没涂色,拉过来涂一下。好了~当你没发现对应的车型,没办法,我们又不能凃空气,只能新造一款车型。造好以后,这种车型以后也是直接涂一下完事。

package flyweight;

import java.util.HashMap;
import java.util.Map;

/************************************************
 *@ClassName : CarFactory
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:16】
 *@Version : 1.0.0
 *************************************************/

public class CarFactory {
    private static Map<String, BWMCar> bwmCarMap = new HashMap<>();

    public static BWMCar getInstance(String name, String color){
        BWMCar bwmCar = bwmCarMap.get(name);
        if(bwmCar==null){
            bwmCar = new BWMCar(name, color);
            bwmCarMap.put(name, bwmCar);
        }
        return bwmCar;
    }
}



 1.3 涂涂涂

package flyweight;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 14:40】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        System.out.println(CarFactory.getInstance("bwm1","black"));
        System.out.println(CarFactory.getInstance("bwm1","grey"));
        System.out.println(CarFactory.getInstance("bwm2","grey"));
        System.out.println(CarFactory.getInstance("bwm1","blue"));
    }
}

1.4 结果

 

可以看到bwm1类型的车都是一个地址,这就是减少创建对象的数量,以减少内存占用和提高性能。

参考

【菜鸟教程】:http://www.runoob.com/design-pattern/flyweight-pattern.html

 本文原文地址:https://blog.youkuaiyun.com/baidu_30325009/article/details/85018784

AI辅助科研工作流:RAG、Agent与GitLab工程化实践 大语言模型在垂直领域的价值,不只体现在生成文本,更体现在如何与外部知识源协同工作。检索增强生成(RAG)通过把PubMed、ClinVar等数据库中的非结构化内容切分、向量化并检索,让模型在回答时携带可追溯的证据;而AI Agent则负责编排多步检索动作,把“查文献—提基因—匹配药物—汇总报告”这类复杂流程自动化。这一组合能有效缓解医学研究中的信息过载问题,让科研人员从海量文献与基因数据中快速筛出候选线索。实际落地时,工程化能力决定系统是否可靠:将检索脚本、提示词与数据版本纳入Git管理,借助GitLab 阅读详情

相关推荐

R语言 | 关联规则

关联规则(AssociationRules)是无监督的机器学习方法,用于知识发现,而非预测。 关联规则的学习器(learner)无需事先对训练数据进行打标签,因为无监督学习没有训练这个步骤。缺点是很难对关联规则学习器进行模型评估,一般都可以通过肉眼观测结果是否合理。 关联规则主要用来发现Pattern,最经典的应用是购物篮分析,当然其他类似于购物篮交易数据的案例也可以应用关联规则进行模式发现。

I think so I am 10万+

设计模式之享元模式学习笔记

前言 享元模式是池技术(String常量池、数据库连接池、缓冲池等)的重要实现方式,可以减少应用程序创建对象,降低程序内存的占用,提高性能。 定义 使用共享对象,有效的大量细粒度的对象 结构图 角色拆解分析: 1.Flyweight:抽象享元角色,同时定义出对象的外部和内部状态的接口或实现 2.ConcreteFlyweight:具体享元角色,实现Flyweight定义的业务 3.Flyweigh...

墨玉浮白的博客 331

Vmware虚拟机克隆详解:固定ip + 修改uuid等内容

分两大步 设置固定ip 克隆后修改相关配置 本文引用的其他地方的图片。会附上链接 若侵权,删 一、设置静态ip 先进行虚拟网络的编辑 接下来的操作需要管理员权限。(给权限就完事了) 接下来设置网卡: 网络和共享中心→ 更改适配器设置→VMware Network Adapter VMnet8 -> 右键属性 修改TCP/Ipv4的配置,网上常见是这种,笔者是英文的...

Unknownfuture的博客 9070

HeadFirst 设计模式学习笔记16--享元模式拾零

本文已搬家至【HeadFirst 设计模式学习笔记】15 享元模式拾零

gnuhpc的专栏 3900

【Flink】状态编程: 订单超时告警

文章目录一、基础概念二、Flink状态编程1、支持的状态类型2、Managed Keyed State六种类型基本API状态的生命周期3、Managed Operator State三、案例:订单延迟告警统计1、需求描述2、需求分析3、数据与模型4、详细实现 一、基础概念 在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一。 有状态计算是指: 在程序计算过程中,在Flink...

一只皮皮熊 2862

智慧矿山无人机空地一体化解决方案

未来,随着技术的不断进步和应用场景的不断拓展,智慧矿山无人机空地一体化解决方案将在矿业领域发挥更加重要的作用,为矿山的可持续发展提供更加有力的保障。该系统能够实现矿山的全方位、全天候监测与管理,提升矿山生产效率,降低安全风险,并为矿山的可持续发展提供有力支持。智慧矿山无人机空地一体化解决方案是当前矿业领域技术创新的重要方向,旨在通过集成无人机技术、物联网、大数据、人工智能等先进技术,实现矿山的智能化、高效化和安全化运营。在矿山爆破、挖掘等危险作业中,无人机可进行远程监控和指挥,降低人员安全风险。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1109

学习笔记【23种设计模式-第十一节:Flyweight Pattern 享元模式】

Flyweight Pattern 享元模式 简述: 享元模式也叫蝇量模式:运用共享技术有效的支持大量粒子度的对象。 常用于系统底层的开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中由我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个。 享元模式能够解决重复对象的内存浪费问题,当系统中有大量相似的对象,可以从缓冲池里拿。这样可以降低系统内存,同时提高效率。 享元模式经典的应用场景就是池技术,String常量池、数据库连接池、缓冲池等等都是享元模式的应用

qq_53273362的博客 144

1. linux系统下在QT中配置OPenCV开发环境

在Linux系统下配置OpenCV的开发环境,需要在官网上下载源码,并使用CMake工具对源码进行编译,与在Windows系统中配置相比复杂许多,本文linux系统为linux minit,opencv是最新版本4.7.0,不过对于linux和opencv的版本要求行不高。此项更改为自己OPenCV想要安装的路径内,默认是安装在**/usr/local。在打开的文件中添加下图中的一行代码,路径是opencv默认的安装路径。按钮,弹出下图界面,默认选择即可,然后点击。

山间点烟雨 2906

设计模式学习笔记---享元模式FlyWeight pattern(Java版)

一、场景 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可一通过享元模式,节省内存。 围棋软件设计 每个围棋棋子都是一个对象,有如下属性: 可以共享(内部状态): 颜色 形状 大小 不可以共享(外部状态): 位置 二、实质 享元模式以共享的方式高效地支持大量细粒度对象的重用。 享元对象能做到共享的关键是区分内部状态和外部状态。 内部状态:可以共享,

吃果冻不吐果冻皮 1338

神经形态芯片:IBM TrueNorth技术详解以及应用案例

2018年的一项演示中,机器人使用TrueNorth处理了复杂的路径规划,功耗仅为传统系统的1/10。它通过模仿人脑的结构,解决了传统芯片在功耗和并行性上的痛点,并在图像识别、物联网和机器人等领域展现了强大潜力。:不同于传统芯片的时钟驱动,TrueNorth是事件驱动的。例如,工厂中的振动传感器使用TrueNorth检测设备故障的早期迹象,实现了更高效的维护策略,避免了停机时间。:在医疗领域,TrueNorth可以用于可穿戴设备,比如一个智能助听器,它能过滤噪音并增强特定声音,功耗低到可以用纽扣电池供电。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2475

【深度学习新浪潮】Harness Engineering 入门实战必看|6个从零可跑开源项目,新手快速上手垂域AI工程落地

很多同学入门 AI Agent、做大模型垂域落地时,都会卡在同一个痛点:只会调用模型、写简单Prompt,却不懂如何做约束管控、流程护栏、任务编排、多智能体边界隔离。而这正是的核心价值。不同于纯理论概念,Harness Engineering 更偏向工程实战,新手不用啃复杂论文,从开源项目动手实操是最高效的学习方式。本文从零基础易上手、可本地一键部署、支持二次改造做实战项目。

专注:太空算力、AI infra、异构调度、大模型成本工程 231

《设计模式》学习笔记——享元模式

一.什么是享元模式 享元模式就是利用共享技术有效地支持大量细粒度对象的复用,帮助我们节省大量内存。比如我们定义一个数据结构记录人的信息,该结构要储存人的id和所在城市(用字符串表示)。 struct person { int id_; std::string city_; }; 当我们需要记录100000条记录时,无疑要创建这100000个结构,对这100000个string对象的...

Jiestriker的博客 333

微信小程序 - 最新详细实现气泡菜单功能,点击任意元素在底部或附近周围弹出气泡菜单列表,仿微信气泡弹框显示菜单快捷功能收纳,自定义气泡弹窗/菜单气泡弹窗,小程序气泡框嵌套菜单组件插件,自动计算弹出定位

微信小程序,vue2,vue3,气泡列表,汽泡菜单,气泡框,泡泡框,悬浮框,悬浮菜单,点击菜单按钮弹出气泡,对话箭头气泡框,弹出的气泡准确定位并吸附在附近,弹出式气泡,弹窗菜单,气泡自定义HTML弹窗,带三角的气泡弹框,三角气泡框里面嵌套菜单,当点击一个按钮或元素时,会从附近弹出一个小气泡一样的菜单列表,自定义气泡框内的内容,点击一个元素在附近弹出一个气泡弹框功能效果,气泡弹框不准怎么办,被盖住了,挡住了,长按弹出,组件插件,微信,自定义气泡菜单组件,气泡弹出框,小程序自定义气泡框,菜单气泡,包裹列表的三角

🏆 前端领域优质创作者 3915

设计模式学习笔记之享元模式

文章目录前言什么是享元模式享元模式的定义与意义享元模式的结构与角色 前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 如果有人看到我写的笔记有不对的地方欢迎留言指出来,是真的欢迎指出来,因为我可能会错很久,然后才发现。学习技术不能闭门造车,要多交流,多讨论,多思考才能成长的快,学的快。 我的个人博客:海加尔金鹰 什...

光滑的秃头 221

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

设计模式学习笔记——22 享元模式

享元模式 定义 享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。 享元模式的定义为我们提出了两个要求:细粒度和共享对象。我们知道分配太多的对象到应用程序中将有损程序的性能,同时还容易造成内存溢出,要避免这种情况,用到的就是共享技术,这里就需要提到内部状态和外部状态了。 因为要求细粒度对象,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分:内部状...

GM. 176

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计模式——结构型模式之享元模式

本人设计模式学习笔记:结构型模式之享元模式

RichelDu8的博客 287

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

设计模式学习笔记——享元模式

享元模式英文叫Flyweight Pattern。Flyweight,应该是一个来自于拳击术语,最轻量级,也叫蝇量级。次奥,我看《大话设计模式》这本书的时候,一直错看成 亨元模式,搞不懂为什么叫这个名字。现在看清楚了,是享元,共享的享,就比较好理解了。享元模式,就是共享、重用一些现成的对象,免得构造太多,消耗资源巨大。因此,享元模式是 单例模式 + 简单工厂模式。

左直拳的马桶_日用桶 2847

设计模式学习笔记-享元模式

小孩画画的时,会使用许多不同颜色的彩色笔,比如使用绿色笔画画这个,然后用红色画画那个,再用蓝色画画蓝天等。这些彩色笔,可以持续使用,也可以交替来回使用。这些不同颜色画笔都是独立个体,不和其他画笔有必要的联系,也就是说,没有规定使用绿色之后才能使用蓝色,或者使用蓝色之后不能红色之类的规定。 在面向对象中,类似画笔这样,可以来回交替使用,且都为独立个体(没有上下文关系),为了避免对象的重复创建,节省...

H_L_S的专栏 384

c++设计模式之享元模式 学习笔记

享元模式应用环境:存在大量对象存储,而且这些对象之间存在较大的相似性,可以应用享元模式,将其相似特征抽象为共享对象,通过这些共享对象来替换以前的大量的相似对象。 比较经典的例子:围棋中的棋子。对于棋盘中的棋子来说,它有位置,颜色等重要特性,如果将这些特性都封装在棋子对象中,那下一盘棋,因为每一个位置的棋子都是一个新的对象,那可能就需要数百个对象。这大大的耗费了内存。 但如果将棋子的不同特征拿出来单独存储,并将相似特征提取出来做为共享对象,那就能大大缩减对象的存储量。比如,将棋子中特征各异的位置信息提取出来单

超级无敌大泡泡的博客 248

设计模式学习笔记(十四)享元模式

1、减少内存占用:享元模式通过共享相似对象的内部状态来减少系统中的内存占用。相同的内部状态可以被多个对象共享,避免了每个对象都保存一份相同的数据。2、提高性能:由于共享对象的复用,减少了对象的创建和销毁次数,从而提高了系统的性能。3、简化对象结构:享元模式将对象分为内部状态和外部状态,内部状态可以共享,外部状态可以在运行时传入。这样简化了对象的结构,使得系统更加灵活、可扩展和易于维护。

weixin_44917291的博客 404

[学习笔记:设计模式] 12_享元模式

享元模式

qq_59896820的博客 1039
上一篇: 【设计模式学习笔记】解释器模式
下一篇: 【设计模式学习笔记】备忘录模式
Roger_CoderLife
博客等级 码龄9年 211粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值