享元模式

C++ 享元模式 享元模式(Flyweight Pattern)运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。 阅读详情

享元模式的核心思想就是将常用对象缓存起来,在使用的时候直接拿来用,不需要创建新的对象,节省创建对象消耗的资源,节省GC回收这些对象时消耗的资源。例如Integer类,JDBC的连接池就是享元模式思想。

下面以餐馆为场景模拟,将菜单与收钱码这种常用的对象缓存起来,面条得每次新鲜出锅不能重复吃哈,就新建对象😁。

新建一个Stuff接口

public interface Stuff {

	String name();
	
}

新建菜单类

public class Menu implements Stuff {

	public String name() {
		return "菜单";
	}

}

新建收款码类

public class CollectionCode implements Stuff {

	public String name() {
		return "收款码";
	}

}

新建面条类

public class Noodle implements Stuff {

	public String name() {
		return "面条";
	}

}

新建餐馆类,将菜单和收款码对象缓存起来,面条就不缓存

import java.util.ArrayList;
import java.util.List;

public class Restaurant {
	
	private List<Stuff> stuffsCache = new ArrayList<Stuff>();

	public Restaurant() {
		stuffsCache.add(0, new Menu());
		stuffsCache.add(1, new CollectionCode());
	}
	
	public Stuff getStuff(String str) {
		for(Stuff stuff:stuffsCache) {
			if(stuff.name().equals(str)) {
				return stuff;
			}
		}
		if("面条".equals(str)) {
			return new Noodle();
		}
		return null;
	}

}

新建测试类

public class Test {
	
	public static void main(String[] args) {
		Restaurant restaurant = new Restaurant();
		System.out.println(restaurant.getStuff("菜单"));
		System.out.println(restaurant.getStuff("收款码"));
		System.out.println(restaurant.getStuff("面条"));
		System.out.println(restaurant.getStuff("菜单")==restaurant.getStuff("菜单"));
	}

}

打印结果
在这里插入图片描述

【RandLA-Net实战】从零构建隧道点云数据集并训练大场景语义分割模型 本文详细介绍了如何使用RandLA-Net构建隧道点云数据集并进行大场景语义分割模型训练。从数据采集、标注到模型训练与优化,提供了完整的实战指南,特别针对隧道场景的特殊挑战提出了解决方案。通过实际案例展示了RandLA-Net在处理大场景点云数据时的高效性和准确性,为隧道巡检等工程应用提供了可靠的技术支持。 阅读详情

相关推荐

《深入 UFS Explorer:自定义 RAID 配置指南》

UFS Explorer支持以虚拟模式组装任何受支持的RAID配置,以便后续访问其内容或恢复丢失数据。启动RAID构建器;向RAID构建器主内容区域的列表中添加RAID组件;为不可用组件插入占位符(需当前RAID级别支持且软件兼容);调整组件的准确顺序;在“虚拟RAID配置”区域设置RAID参数;以虚拟模式组装阵列各部分。程序主窗口“存储设备导航面板”中打开的任何存储设备(包括驱动器、逻辑卷、磁盘镜像、虚拟磁盘及其他复杂存储设备)均可作为RAID组件。

melonbo的专栏 1398

深入浅出享元模式

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

跬步致远——Ai92 3万+

CiteSpace基础操作(CNKI数据的导入分析)(一)

1 Cite Space简单介绍 2 文献导入 2.1 打开知网,选择高级检索

m0_50990607的博客 5万+

享元模式介绍

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

qq_25409421的博客 1718

Rider高效调试UE引擎:无需编译源码的符号配置指南

本文提供了一份详尽的Rider高效调试UE引擎指南,核心在于无需编译源码即可配置调试符号。通过Epic启动器下载官方PDB文件,并在Rider中正确配置外部符号服务器路径,开发者能在10分钟内实现对引擎内部代码(如AActor::Tick)的源码级断点调试、变量查看和调用堆栈分析,极大提升问题排查效率。

weixin_29011239的博客 340

把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析

ABAP SQL窗口函数在不丢失明细记录的前提下,为每行数据提供组内统计和排名功能。它通过OVER子句定义计算窗口,支持三类函数:聚合型(AVG/SUM等)、排名型(ROW_NUMBER/RANK等)和取值型(LEAD/LAG)。相比GROUP BY会合并多行数据,窗口函数保留原始记录同时附加计算结果,特别适合需要保留明细又要展示统计信息的业务场景,如销售排名、客户分层分析等。语法核心是OVER子句,通过PARTITION BY分组,ORDER BY排序,可灵活定义计算范围。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1272

设计模式——享元模式

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

程序猿进阶 2351

dji psdk开发 关于SDK认证芯片的使用

Payload SDK V3.10.0 于 2025-1-8 发布,增加了 Matrice 4T/4E 机型支持,同时也增加了 DJI SDK 认证芯片(DJI SDK CC)功能支持。关于认证芯片的介绍大疆 SDK 认证芯片(DJI SDK Certified Chip),简称 DJI SDK CC,用于认证基于 DJI Eport/Eport-Lite 接口开发的第三方负载设备,确保设备能够正常工作并与无人机可以进行有效通信,起到负载安全认证和功能授权的作用。

热爱生活,忠于自己 2142

JAVA享元模式

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

帅哥威的博客 7324

数据分析之AB测试基础知识

在 A/B 测试中,零假设是两组的指标是相同的,当假设检验推断出两组指标不同,但事实上两组指标相同时,就是第一类错误。

qq_45727498的博客 560

SAP中关于预测需求的重要载体:计划独立需求

预测,就是为了调节客户需求的波动、不平衡,使企业的生产计划、物料计划尽量平稳、有序的必备工具。计划独立需求,Planned Independent Requirement(PIR)是SAP系统中最常见的预测需求。

saplakes的博客 1878

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

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

爱橙子的OK绷的专栏 2375

OWASP-ZAP扫描器的使用

目录 OWASP-ZAP 更新 代理 目录扫描 主动扫描(Active Scan) 扫描结果 生成报告 OWASP-ZAP OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。 也可以说ZAP是一个中间人代理。它能够获取你对Web应用程序发出的所有请求以...

谢公子的博客 2万+

什么是享元模式?

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

weixin_40980639的博客 4066

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

weixin_44131922的博客 1044

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[设计模式]享元模式

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

砷碲 - Shendi 6853

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

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

weixin_28799111的博客 419

Java设计模式——享元模式

享元模式英文称为“Flyweight Pattern”。其定义为:采用共享来避免大量拥有相同内容对象的开销,这里最常见、直观的开销就是内存损耗。享元模式以共享的方式高效支持大量细粒度对象。在该模式中,核心概念是共享,为实现共享,区分了内蕴状态和外蕴状态。内蕴状态是共性,存储在享元内部,不会随环境改变而不同,可共享;外蕴状态是个性,随环境改变而改变,由客户端保持,在具体环境下,客户端将外蕴状态传递给享元以创建不同对象。根据《Java与模式》,享元模式分为单纯享元模式和复合享元模式。

novelly的专栏 963
上一篇: 责任链模式
下一篇: 装饰器模式
l_learning
博客等级 码龄8年 15粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值