设计模式学习笔记八:享元模式

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

享元模式,又叫蝇量模式(有点恶心):适用于是小类的复用,多与工厂模式配合使用。没看设计模式的人,在coding的时候应该会不知不觉中写过这种结构的代码,只不过不知道名字叫什么而已。

享受模式详细定义:传送门


上代码:

package com.array7.flyweight;

import java.util.HashMap;

public class Run {
	public static void main(String[] args) {
		// 调用
		FruitFactory factory = new FruitFactory();
		factory.doEat("apple");
		factory.doEat("banana");
		factory.doEat("orange");
	}
}

class FruitFactory {
	private HashMap<String, Fruit> fruits = new HashMap<String, Fruit>();

	public FruitFactory() {
		// 初始化蝇量元素
		fruits.put("apple", new Apple());
		fruits.put("banana", new Banana());
		fruits.put("orange", new Orange());
	}

	/**
	 * 吃掉
	 * 
	 * @param type
	 */
	public void doEat(String type) {
		Fruit fruit = fruits.get(type);
		fruit.eat();
	}
}

/**
 * 水果接口
 * 
 * @author array7
 * 
 */
interface Fruit {
	/**
	 * 吃接口
	 */
	public void eat();
}

/**
 * 苹果
 * 
 * @author array7
 * 
 */
class Apple implements Fruit {

	@Override
	public void eat() {
		System.out.println("eat a apple...");
	}

}

/**
 * 橘子
 * 
 * @author array7
 * 
 */
class Orange implements Fruit {

	@Override
	public void eat() {
		System.out.println("eat a orange...");
	}

}

/**
 * 香蕉
 * 
 * @author array7
 * 
 */
class Banana implements Fruit {

	@Override
	public void eat() {
		System.out.println("eat a banana...");
	}

}


设计模式学习笔记(十二)享元模式及其应用 Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 享元(Flyweight)模式:顾名思义就是被共享的单元。意图是复用对象,节省内存,提升系统的访问效率。比如在红白机冒险岛游戏中的背景花、草、树木等对象,实际上是可以多次被不同场景所复用共享,也是为什么以前的游戏占用那么小的内存,却让我们感觉地图很大的原因。 一、享元模式介绍 阅读详情

相关推荐

三相电路小白必看:正弦量向量表示法保姆级教程(附欧拉公式推导)

本文为电气工程初学者详细解析了三相电路中正弦量的向量表示法,即相量法。通过几何直观和欧拉公式推导,阐明如何将时变正弦量转化为静态复平面向量进行运算,并利用平行四边形法则简化同频正弦量的加减计算。文章结合Python代码进行可视化验证,帮助读者牢固掌握这一分析交流电路的核心工具。

linux6sysadmin的博客 1000

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

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

gnuhpc的专栏 3901

LangChain开发避坑指南:为什么Pylance总提示‘无法解析导入‘?实测7种修复方案

本文深入解析了在VS Code中使用LangChain开发时,Pylance频繁提示‘无法解析导入’的根本原因——Python解释器与语言服务器的环境路径不一致。文章提供了从基础排查到深度配置的7种实测修复方案,包括切换解释器、配置extraPaths、使用pyrightconfig.json等,旨在帮助开发者彻底解决此问题,提升AI应用开发效率。

weixin_28826521的博客 447

图说设计模式:享元模式

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用,它是一种对象结构型模式。享元模式包含四个角色:抽象享元类声明一个接口,通过它可以接受并作用于外部状态;

cf18862344377的博客 1355

Windows 10 下 Nacos 3.0.2 单机版保姆级安装教程(含JDK 17配置与MySQL 8.0连接避坑)

本文提供Windows 10下Nacos 3.0.2单机版的详细安装教程,涵盖JDK 17配置、MySQL 8.0连接优化及生产级安全设置。通过步骤详解和常见问题解决方案,帮助开发者快速完成Nacos的安装与配置,确保服务发现与配置管理的高效运行。

weixin_29237635的博客 322

测绘无人船避坑指南:云卓H12Pro遥控器接海康摄像头,从网络设置到RTSP流延迟优化全流程

本文详细解析了测绘无人船视频子系统的优化方案,重点介绍海康威视摄像头与云卓H12Pro遥控器的深度适配流程。从网络设置到RTSP流延迟优化,提供了一套经过实测的低延迟(<200ms)解决方案,适用于复杂水域环境下的测绘任务。

weixin_30415113的博客 628

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

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

Jiestriker的博客 333

光模块组成

时钟恢复电路(Clock Data Recovery,简称CDR)是光模块中的关键组成部分,CDR的作用主要是从接收到的信号中提取出数据序列,并且恢复出与数据序列相对应的时钟时序信号,从而还原接收到的具体信息。因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再定时,其中的再定时指的就是CDR时钟数据恢复。

han_better的博客 5728

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

享元模式

qq_59896820的博客 1039

深度学习实战35-图卷积神经网络GCN模型的搭建与应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战35-图卷积神经网络GCN模型的搭建与应用,GCN是一种用于处理图结构数据的深度学习模型,它可以捕捉节点之间的拓扑关系和局部特征,并进行图级别的预测和分类任务。下面将介绍如何搭建并应用GCN模型。

微学AI的博客 2226

YOLOv12涨点改进 | 独家创新-注意力改进篇 | ECCV 2024 | YOLOv12引入AgentAttention代理注意力模块,兼顾 Softmax 和线性注意力优点,提高检测精度

🔥本文给大家介绍使用Agent Attention模块改进YOLOv12网络模型。其主要作用是通过引入高效的代理token来减少计算复杂度,同时保留全局上下文建模能力。相比传统的Softmax注意力,Agent Attention通过代理token聚合并广播信息,从而降低了模型在处理高分辨率图像时的计算负担,并显著提高了推理速度。其优势在于保持了目标检测中的全局信息处理能力,同时加速了生成过程,特别是在高分辨率场景下,可以提高检测精度、减少内存消耗,并提升处理速度。

Ai缝合怪、助力小伙伴高效发论文 157

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

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

weixin_44917291的博客 404

B.3【智能标注】:基于Labelstudio的UIE半监督深度学习的智能标注方案(云端版),提效。

Label Studio 所提供的 Machine Learning Backend 提供了一个比较灵活的辅助人工标注的框架,我们通过它确实可以加快 nlp 数据的标注Label Studio 的 enterprise 版本提供了 Active Learning 的流程,不过从其描述看这个流程并不完美,尤其是 fit 部分,由于 Label Studio 低估了「Train」所花费的时间,所以每次标注都自动训练的流程可能并不会那么顺滑(会在链接时候等待一段时间)

丨汀、的博客 1840

java23种设计模式-享元模式

结构型设计模式,通过共享技术实现大量细粒度对象的复用,有效减少内存占用并提高性能。核心思想:分离内部状态(可共享)与外部状态(不可共享)

专注后端开发 645

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Golang学习笔记_38——享元模式

享元模式是一种结构型设计模式,通过共享对象来有效支持大量细粒度对象的复用,从而减少内存占用和提高性能。内部状态(Intrinsic):可共享的固定属性(如字符编码、颜色配置)外部状态(Extrinsic):不可共享的运行时上下文(如坐标位置、字体大小)享元模式通过共享细粒度对象内存占用问题:减少重复对象的存储性能优化问题:降低对象创建开销状态管理问题:明确区分内外状态使用sync.Map或mutex保证线程安全严格分离内部/外部状态合理设计对象键值(如颜色+名称组合键)

LuckyLay的博客 1384

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

GM. 176

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

1 概述 1.1 概述 1.2 定义 1.3 结构图 1.4 角色 2 典型实现 2.1 步骤 2.2 抽象享元类 2.3 具体享元类 2.4 非共享具体享元类 2.5 享元工厂类 3 实例 4 加入外部状态 5 单纯享元模式与复合享元模式 5.1 单纯享元模式 5.2 复合享元模式 6 补充说明 7 主要优点 8 主要缺点 9 适用场景 10 总结 ...

氷泠 741

Java设计模式()享元模式

声明:此笔记为B站up主“程序员大表哥”所授课程【23种java设计模式】个人学习笔记,仅供学习,不做他用。 链接:https://www.bilibili.com/video/av81810102 模式定义: 运用共享技术有效地支持大量细粒度的对象 因为要求细粒度对象,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分: 内部状态和外部状态。 //内部状态: ...

weixin_42397249的博客 200

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

享元模式:主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。【菜鸟】 文章目录           1.1 宝马车长这样           1.2 工厂是这样涂装的           1.3 涂涂涂           1.4 结果           参考  这个模式也比较简单。比如...

Roger_CoderLife的博客 140

C#设计模式学习笔记:(11)享元模式

本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,记录一下学习过程以备后续查用。 一、引言 今天我们要讲结构型设计模式的第六个模式–享元模式,先从名字上来看,“享元”可以这样理解–共享“单元”。单元是什么呢?举例说明:对于图形而言就 是图元;对于英文来说就只26个英文字母;对于汉语来说就是每个汉字。也可以这样理解“元”–构成事物的最小单元,这些单元如果大量且重复出现,我们可 以缓存重复出现的单元,达到节省内存的目的。换个说法享元是为了节省空间,

chinaherolts2008的博客 326

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

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

光滑的秃头 221

设计模式学习笔记:享元模式(Flyweight)

文章目录一、享元模式介绍二、使用场景三、实例讲解四、代码示例五、输出结果 一直以为人是慢慢长大的,其实不是,人是在一瞬间长大的。 一、享元模式介绍 享元模式是设计模式中结构型模式的一种。主要用于减少创建对象的数量,以减少内存占用和提高性能。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。 二、使用场景 系统中有大量相似对象 日志对象工厂,获取日志对象时并不会每次创建日志对象,而是通过日志工厂获取,日志工程获取日志对象时会先从缓冲池里取日志对象,取不到才会新建日志对象返回。

爱辰 277

设计模式学习笔记 - 设计模式与范式 -结构型:7.享元模式(上):享元模式原理和应用

1.享元模式的原理所谓 “享元”,就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象时不可变对象。具体来讲,当一个系统中存在大量重复对象的时候,就可以利用享元模式,将对象设计成享元,在内存中只保留一份实例,供多处代码引用,这样可以减少内存中对象的数量,以及起到节省内存的目的。实际上,不仅仅相同的对象可以设计成享元,对于相似的对象,也可以将这些对象中相同的部分(字段),提取出来设计成享元,让这些大量相似对象引入这些享元。2.享元模式的实现。

chenjian723122704的专栏 861

设计模式学习笔记(11)--享元模式

1.享元模式        享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。 2.uml图   3.代码 package com.wuhuiskiff.www.fl...

为梦想而奋斗,无悔_一叶扁舟的点滴成长! 409

每日一个设计模式之【享元模式】

大家好✋,我是知识汲取者😄,今天给大家带来一篇有关享元模式的学习笔记。众所周知能够熟练使用设计模式是一个优秀程序猿的必备技能,当我们在项目中选择一个或多个合适的设计模式,不仅能大大提高项目的稳健性、可移植性、可维护性,同时还能让你的代码更加精炼,具备艺术美感。有时候我们在系统中由于对象创建的数量过多,会造成内存溢出,比如我们设计一个下围棋的程序,黑子有181颗、白子有180颗,总共有361颗,如果我们一股脑地不加以注意,每落一颗子就创建一个对象的化,那问题就大量,得创建大量对象。

热爱编程、热爱生活、热爱探索 522
上一篇: 互联网秒杀设计
下一篇: 设计模式学习笔记九:原型模式(和深浅复制)
七郎
博客等级 码龄14年 31粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值