设计模式--享元模式-sj

[tools]-excel的一些操作 1. 快速选中全部工作表 右键单击工作窗口下面的工作表标签,在弹出的菜单中选择“选定全部工作表”命令即可()。 2. 快速删除选定区域数据 如果用鼠标左键向上或向左(反向)拖动选定单元格区域的填充柄时,没有将其拖出选定区域即释放了鼠标右键,则将删除选定区域中的部分或全部数据(即拖动过程中变成灰色模糊的单元格区域,在释放了鼠标左键后其内容将被删除)。 3. 给单元格重新命名 4. 在Excel中选择... 阅读详情

是什么

享元模式是运用 共享技术复用对象 的一种模式。该模式中,以对象的信息状态划分,可以分为内部数据和外部数据。内部数据是对象可以共享出来的信息,这些信息不会随着系统的运行而改变;外部数据则是在不同运行时被标记了不同的值。

享元模式一般可以分为三个角色,分别为 Flyweight(抽象享元类)、ConcreteFlyweight(具体享元类)和 FlyweightFactory(享元工厂类)。抽象享元类通常是一个接口或抽象类,向外界提供享元对象的内部数据或外部数据;具体享元类是指具体实现内部数据共享的类;享元工厂类则是主要用于创建和管理享元对象的工厂类。

举个例子

// 抽象享元类
interface Flyweight {
    // 对外状态对象
    void operation(String name);
    // 对内对象
    String getType();
}
// 具体享元类
class ConcreteFlyweight implements Flyweight {
    private String type;
 
    public ConcreteFlyweight(String type) {
        this.type = type;
    }
 
    @Override
    public void operation(String name) {
        System.out.printf("[类型 (内在状态)] - [%s] - [名字 (外在状态)] - [%s]\n", type, name);
    }
 
    @Override
    public String getType() {
        return type;
    }
}
// 享元工厂类
class FlyweightFactory {
    private static final Map<String, Flyweight> FLYWEIGHT_MAP = new HashMap<>();// 享元池,用来存储享元对象
 
    public static Flyweight getFlyweight(String type) {
        if (FLYWEIGHT_MAP.containsKey(type)) {// 如果在享元池中存在对象,则直接获取
            return FLYWEIGHT_MAP.get(type);
        } else {// 在响应池不存在,则新创建对象,并放入到享元池
            ConcreteFlyweight flyweight = new ConcreteFlyweight(type);
            FLYWEIGHT_MAP.put(type, flyweight);
            return flyweight;
        }
    }
}
public class Client {
 
    public static void main(String[] args) {
        Flyweight fw0 = FlyweightFactory.getFlyweight("a");
        Flyweight fw1 = FlyweightFactory.getFlyweight("b");
        Flyweight fw2 = FlyweightFactory.getFlyweight("a");
        Flyweight fw3 = FlyweightFactory.getFlyweight("b");
        fw1.operation("abc");
        System.out.printf("[结果 (对象对比)] - [%s]\n", fw0 == fw2);
        System.out.printf("[结果 (内在状态)] - [%s]\n", fw1.getType());
    }
}

总结

如果对象已经存在于享元池中,则不会再创建该对象了,而是共用享元池中内部数据一致的对象。这样就减少了对象的创建,同时也节省了同样内部数据的对象所占用的内存空间。
线程池,内存中String字符串池,都是这样的思想。将商品存储在应用服务的缓存中,那么每当用户获取商品信息时,则不需要每次都从 redis 缓存或者数据库中获取商品信息,并在内存中重复创建商品信息了。

在创建对象时,如果我们可以共用对象的内部数据,那么通过享元模式共享相同的内部数据的对象,就可以减少对象的创建,实现系统调优。 使用URL淘汰机制!!!

@-springboot-zj-spring-各种注解的解释 @ConditionalOnProperty value 参考kudu-starter name属性,name用来从application.properties中读取某个属性值 value 数组,获取对应property名称的值,与name不可同时使用 @Qualifier 在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl 解决:Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意 阅读详情

相关推荐

[java-tools]-使用xxl-job

原理 本质是底层封装了quartz 客户端使用 /** * - 1、 新建一个继承com.xxl.job.core.handler.IJobHandler的Java类; * - 2、该类被Spring容器扫描为Bean实例,如加“@Component”注解; * - 3、 添加“@JobHander(value="自定义jobhandler名称")”注解,注解的value值为自定义的Job...

wlwork66的博客 812

Java设计模式之享元模式

参考:https://www.lsjlt.com/news/156651.html 适用共享技术有效的支持大量细颗粒度的对象

m0_52202435的博客 90

别再瞎调了!STM32 Systick延时函数避坑指南(正点原子、野火、慧净代码对比)

本文深入解析STM32 Systick延时函数的实现差异与优化策略,对比正点原子、野火、慧净等主流方案的优缺点。针对us和ms级延时精度问题,提供避坑指南和高级优化技巧,帮助开发者根据项目需求选择最佳方案,提升嵌入式系统的定时控制精度。

weixin_28717807的博客 339

Java设计模式:开篇

Java设计模式:开篇,设计模式来源、意义、分类、简介

专注分享技术、实用优质教程、资源 865

Pinocchio 安装教程|机器人学的必备库

安装pinocchio,不要安装pip3 install pinocchio!

darcsdn 1660

嵌入式Linux Qt应用程序卡死问题分析记录

根据应用和系统层面的分析,软件功能异常和卡死现象的原因是系统控制台/dev/console阻塞导致依赖其的相关应用和命令异常。系统控制台/dev/console阻塞的原因还未确定,最近的软件版本和其他测试同事未出现该问题,所以很大可能是串口线的问题,待后续有进展了继续更新。

V10_x的博客 1634

面向对象设计模式:23种经典模式解析

1.背景介绍 面向对象设计模式是一种软件设计的方法,它提供了一种抽象的方式来解决常见的软件设计问题。这种方法通过将问题分解为一组可重用的、可组合的对象来解决。这些对象可以表示实体、概念或抽象,并可以通过消息传递来交互。设计模式可以帮助程序员更快地开发高质量的软件,并提高代码的可读性、可维护性和可扩展性。 在本文中,我们将讨论23种经典的面向对象设计模式,并详细解释它们的定义、原理、优缺点和应用...

AI天才研究院 2378

ENSP:小型企业网络拓扑设计

包含的技术:ospf、dhcp中继、ac+ap、vrrp+mstp、acl、浮动路由、静态路由、vlan划分

weixin_45921302的博客 1万+

设计模式

1.创建性模型(提供了一种在创建对象的同时隐藏创建逻辑的方式)5 *工厂模式 *抽象工厂模式 *单例模式 *建造者模式 *原型模式2.结构型模式(关注类和对象的组合,继承的概念被用来组合接口和定义组合对象新功能)8 *适配器模式 *桥接模式 *过滤器模式 *组合模式 *装饰器模式

sj2017的博客 282

Zemax操作41--公差分析(一)

zemax公差

lzy750750的博客 5972

Roboguide与TIA V16通讯

Roboguide与TIA V16通讯

haier123888的博客 2671

设计模式 简介

转    设计模式读书笔记文档下载2014-04-21 分类:设计模式 阅读(1248) 评论(14)         这个读书笔记好早就写好了,一直想整理成文档,由于没有时间一直耽搁了,最近比较闲,时间较为充裕所以就整理了。目前提供两种文档格式的下载:chm和pdf。        下载地址如下:        设计模式读书笔记.pdf:http://pan.baidu.com/s/1sj55t...

weixin_34038652的博客 69

STM32面试知识点总结分析

通过Boot引脚设定,寻找初始地址初始化栈指针 __initial_sp指向复位程序 Reset_Hander设置异常中断 HardFault_Handler设置系统时钟 SystemInit调用C库函数 _main。

嵌入式技术开发 2513

potplayer-放大画面

wlwork66的博客 4868

YOLO11 改进 - C2PSA | C2PSA融合HEWL(高频增强小波层):小波逆变换+双通道注意力增强+高频显式增强 | TGRS 2026

本文介绍了高频增强小波层(HEWL),一种专为解决红外小目标检测中边缘退化与语义模糊问题设计的上采样模块。该方法结合小波逆变换与交替通道注意力(ALCA),通过显式增强高频细节并优化特征融合,实现精准的边缘重建与语义对齐。我们将 HEWL 融入 PSABlock 结构构建了 C2PSA_HEWL 模块,并成功集成进 YOLO11 的骨干网络,替代原有的 C2PSA 模块。实验证明,结合 HEWL 的 YOLO11 在检测任务中表现优异,有效提升了模型对细节特征的捕捉能力。

魔改工程师的博客 102

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

pr--知识统计

PR导出的“比特率设置”有VBR1次、VBR2次、CBR,三者在输出效果上的优缺比较和最优选择? go: https://www.zhihu.com/tardis/sogou/qus/67212374

wlwork66的博客 2065

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

springboot--mybatis枚举自动转换实现

需求 数据传递过来的值是枚举的name;存储到数据库为code;查询出来,code化为name,给出去。 看图–查询 1数据 2枚举 3接口 3结果 看图–插入 数据库 代码实现 public class AutoEnumTypeHandler <E extends Enum<E>> extends BaseTypeHandler<E> { private BaseTypeHandler typeHandler; public Aut

wlwork66的博客 2060

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

无情替换JSON 中的数据

无情替换JSON 中的数据 import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.Map; public class WJsonUtil { /** * 获取指定json属性对应得数据 * * @param objJson * @param reg * @return */ publi

wlwork66的博客 1883

[工具]-加密-jm-jiami-sha-uuid-md5

加密是经常需要遇到的,所以总结一些 One–工具 . org.apache.commons.codec.digest.DigestUtils 今后加密就不用到处去找了 md5加密可以返回16 可以返回32 md5Hex:MD5加密,返回32位字符串 sha1Hex:SHA-1加密 sha256Hex:SHA-256加密 sha512Hex:SHA-512加密 md5:MD5加密,返回16位字符串.........

wlwork66的博客 743

[java-tools]--m3u8需要生产win的bat进行视频文件的批处理(ts有加密)

001 场景–m3u8需要生产win的bat进行视频文件的批处理

wlwork66的博客 739

[tools]-SecureCRT的主题和颜色调节

目标 要gloal,不要局部单一的session 点入 options===》gloabl options 注意:配置完毕需要重启才能生效

wlwork66的博客 593

@valid---用好valid,让接口干净

引入 <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency> 实体检查 one 1,2,3 逗号隔开的单个字符串 @NotEmpty(message = "channels can't null or empty")

wlwork66的博客 547

[工具]--lambuda--List排序-List中内容相加

各种情况总结: one List降序 public static void main(String[] args) { List<Integer> list = Arrays.asList(3, 1, 5, 100); List<Integer> newList = list.stream().sorted(Comparator.co...

wlwork66的博客 494

日期-rq-json-pringMVC序列化-日期大小写

时间 package com.streamax.basePlatForm.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTime...

wlwork66的博客 486

redisson

redisson 命令 1 redisson

wlwork66的博客 417
上一篇: 设计模式--原型模式-sj
下一篇: [工具]--lambuda--接口玩法-函数式接口
吧啦蹦吧
博客等级 码龄10年 52粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值