享元模式

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

享元模式

享元模式概念

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

享元模式类图

这里盗了个别人的图
在这里插入图片描述

享元模式代码示例

  • 享元接口

    package com.xfc.design.patterns.flyweight;
    
    /**
     * 享元接口
     *
     * @author xf
     * @date 2019/12/23 15:32
     */
    public interface FlyWeight {
    
        /**
         * 享元模式中的方法
         * @param state
         * @return
         */
        Object execute(String state);
    }
    
    
  • 享元接口具体实现

    package com.xfc.design.patterns.flyweight;
    
    /**
     * 具体享元类,实现享元接口。该类的对象将被复用
     *
     * @author xf
     * @date 2019/12/23 15:34
     */
    public class ConcreteFlyWeight implements FlyWeight {
    
        /**
         * 实例名称
         */
        private String name;
    
        public ConcreteFlyWeight(String name) {
            this.name = name;
        }
        
        /**
         * 享元模式中的方法
         *
         * @param externalState 外部状态
         * @return
         */
        @Override
        public Object execute(String externalState) {
            return this.name + " -> " + externalState + " -> " + this.hashCode();
        }
    }
    
    
  • 享元工厂

    package com.xfc.design.patterns.flyweight;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 享元工厂
     *
     * @author xf
     * @date 2019/12/23 15:40
     */
    public class FlyWeightFactory {
    
        /**
         * 享元池
         */
        private final static Map<String,FlyWeight> flyWeightFactories = new HashMap<>();
        /**
         * 根据名称获取享元类
         * @param name
         * @return
         */
        public static FlyWeight getInstance(String name){
            // double check for thread security
            if(flyWeightFactories.get(name) == null){
                synchronized (flyWeightFactories){
                    if(flyWeightFactories.get(name) == null) {
                        flyWeightFactories.put(name, new ConcreteFlyWeight(name));
                    }
    
                }
            }
            return flyWeightFactories.get(name);
        }
    
    
    }
    
    
  • 测试

    package com.xfc.design.patterns.flyweight;
    
    import org.junit.jupiter.api.Assertions;
    import org.junit.jupiter.api.Test;
    
    /**
     * 享元模式测试
     * 相同的状态下不同新产生实例对象,这就是享元模式的重要作用,解决了实例过多导致的性能下降问题
     * 并且可以通过外部状态改变相同实例的行为
     */
    class FlyWeightTest {
    
        @Test
        void execute() {
            FlyWeight instance = FlyWeightFactory.getInstance("A");
            final Object resultA = instance.execute("A-state");
            FlyWeight instanceB = FlyWeightFactory.getInstance("B");
            final Object resultB = instanceB.execute("B-state");
            FlyWeight instanceA1 = FlyWeightFactory.getInstance("A");
            final Object resultA1 = instanceA1.execute("A-state-1");
            FlyWeight instanceB1 = FlyWeightFactory.getInstance("B");
            final Object resultB1 = instance.execute("B-state-1");
            System.out.println("resultA = " + resultA);
            System.out.println("resultB = " + resultB);
            System.out.println("resultA-1 = " + resultA1);
            System.out.println("resultB-1 = " + resultB1);
            // 相同的状态下不同新产生实例对象,这就是享元模式的重要作用,解决了实例过多导致的性能下降问题
            Assertions.assertAll("instances", () -> Assertions.assertEquals(instance, instanceA1), () -> Assertions.assertEquals(instanceB, instanceB1));
        }
    }
    

技术交流 jannik.xf2016@gmail.com

DySAT+: Enhancing Dynamic Graph Representation Learning with Multi-Head Self-Attention and Temporal- 本文深入探讨了DySAT+模型在动态图表示学习中的创新应用,通过多头时空注意力机制和层级信息融合策略,有效解决了动态图数据中的时间维度信息捕捉和结构演变动态适应问题。该模型在社交网络异常检测和金融交易网络分析等场景中表现出色,显著提升了预测准确率和响应速度。 阅读详情

相关推荐

跟着团子学SAP EPPM:项目管理常见的集成场景(PPM\PS\MS Project)

在SAP的EPPM解决方案中,针对企业战略级别的投资组合管理首先是定义合适的投资组合的层级结构,在投资组合下可以通过不同维度去定义投资篮(Portofolio Bucket)进行层层拆分,在最下层级的投资篮下可以分配明细的投资项(Portofolio Item),投资项可以是独立的一个一个具体执行的项目,也可以是单纯的一次服务等等。 今天主要聚焦在投资项的维度展开讲一下在SAP中投资项常见的几种集成模式: 集成场景1:使用PPM中的Project Management进行项目管理 第一个场景是在创建投资项

Lucas1211的博客 4140

深入浅出享元模式

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

跬步致远——Ai92 3万+

华硕电脑Win10改Win7系统:BIOS设置详解

通过上述步骤,华硕电脑用户可以将系统从Windows 10更改为Windows 7。虽然这个过程可能涉及一些技术细节和潜在的风险(如数据丢失和驱动不兼容),但只要按照指南仔细操作并做好准备工作,大多数用户应该能够成功完成系统回滚。请记住,在进行任何系统更改之前都要备份重要数据,并确保已了解所有潜在的风险和限制。希望本文能够帮助到需要回滚到Windows 7的华硕电脑用户!

nntxthml的博客 2262

享元模式介绍

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

qq_25409421的博客 1718

IDEA类和方法注释模板设置(非常详细)

IDEA类和方法注释模板设置(非常详细)

黑桃A的博客 10万+

深度解读 ABAP CDS View 中的 @Analytics.dataCategory: #FACT 注解

注解在 ABAP CDS View 中具有重要意义。它不仅定义了当前视图在数据模型中的角色,还为后续的分析和报告奠定了基础。在实际开发中,通过合理使用这一注解,可以显著提升数据模型的可用性和系统性能。无论是简单的 KPI 展示还是复杂的多维分析,这一注解都能发挥关键作用。

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

设计模式——享元模式

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

程序猿进阶 2351

【爬虫实战】Instagram博主图片爬取:模拟登录+滚动加载,轻松抓取高清美图

在当今社交媒体时代,Instagram作为全球最受欢迎的图片分享平台之一,汇聚了无数优质博主的海量精美图片。对于数据爱好者、营销分析师、AI训练数据收集者来说,如何高效、稳定地爬取Instagram博主的图片,成为了一项极具实用价值的技术挑战。然而,Instagram的反爬机制日益严格,传统的静态页面请求已经无法满足需求。本文将带你从零开始,使用2024-2025年最新技术栈,实现模拟登录、滚动加载、高清图片下载的全流程爬虫。✅ 全流程代码可直接运行✅ 模拟手机端请求绕过反爬。

2201_76125261的博客 598

JAVA享元模式

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

帅哥威的博客 7324

【应用】打造你的安全本地AI购物助手:OpenClaw + 淘宝MCP部署全攻略

本文介绍了在Ubuntu虚拟机中配置OpenClaw连接Windows宿主机的淘宝MCP服务的两种方案。核心原理是通过修改MCP服务监听地址或SSH隧道转发,实现跨网络访问。方案1推荐修改MCP服务绑定0.0.0.0并配置防火墙放行端口,适合长期使用;方案2通过SSH隧道转发,适合临时测试。文章详细说明了环境准备、配置文件修改及两种互通方案的具体实施步骤,重点解决了虚拟机与宿主机网络互通的关键问题。

海兰 1324

MATLAB - 使用 RRT 进行挖掘机运动规划

本例演示了如何使用运动规划器在包含障碍物的环境中为挖掘机规划路径。在此示例中,您将以运动树的简化形式为挖掘机建模,然后使用基于采样的运动规划器确定挖掘机在存在障碍物的两个姿势之间的可行路径。在 Simscape™ 多体™ 模型中模拟结果。

机器人控制与仿真应用 1850

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

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

爱橙子的OK绷的专栏 2375

【项目实战】使用Python - Mediapipe、OpenCV进行手部面部检测(Python源码)

本文介绍了使用MediaPipe和OpenCV库进行实时面部和手部关键点检测的方法。通过MediaPipe的Holistic模型,可以获取468个面部特征点及每只手21个特征点。文章详细说明了环境配置、模型初始化参数设置,并提供了完整的代码实现,包括视频流处理、关键点绘制和FPS计算等功能。这套方案可应用于手语识别、疲劳检测等计算机视觉场景,为开发者提供了一套高效的开箱即用解决方案。

梦想起飞的地方 482

什么是享元模式?

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

weixin_40980639的博客 4066

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

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

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

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

weixin_44131922的博客 1044

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[设计模式]享元模式

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

砷碲 - Shendi 6854

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

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

weixin_28799111的博客 420

Java设计模式——享元模式

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

novelly的专栏 965
上一篇: springboot中的事件
下一篇: HashMap使用遇到的坑
程序员行一
博客等级 码龄12年 32粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值