java 享元设计模式

Java高新技术:享元设计模式及枚举 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第一部分:享元设计模式 一、示例代码 package day.day17; public class FlyweightPatternDemo { public static void main(String[] args){ String str1 = 阅读详情

定义:提供了减少对象数量从而改善应用所需的对象结构的方式

java String类就是使用了 享元设计模式 还有数据库连接池等

缺点

关注内部或者外部结构,关于线程安全的问题

使系统 逻辑结构复杂化

内部状态

不随外界变化而变化的

外部状态

会随外界变化而发生变化的

 

比如计算公司有几个部门 每个部门有多少人

public class Department {
    private String name;
    private int count;

    public Department(String name, int count) {
        this.name = name;
        this.count = count;
        System.out.println("create  object");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}
public class DepartmentFactory {
    private static Map<String,Department> map  = new Hashtable<>();
    public static Department getDepartment(String str){
        if(map.get(str)==null){
            Department department = new Department(str, (int) (Math.random()*100));
            map.put(str,department);
        }
        return map.get(str);
    }
}

测试类

public class Test {
    public static void main(String[] args) {
       Department department =  DepartmentFactory.getDepartment("销售部门");
       System.out.println(department.getCount());
        Department department1 =  DepartmentFactory.getDepartment("销售部门");
        System.out.println(department1.getCount());
    }
}

这个在Android图片加载库中的LRUCache中就用到了,就是利用了享元模式,再看下jdk系统源码中那用到了享元模式,看下Integer

 public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

意思是-128到127这个数据会缓存起来 超过这个就不缓存了,这里面就用到了享元模式,看下例子

 Integer a =  Integer.valueOf(127);
       Integer b = 127;
       System.out.println("a==b的结果为"+(a==b));
        Integer c =  Integer.valueOf(128);
        Integer d = 128;
        System.out.println("c==d的结果为"+(c==d));

结果

a==b的结果为true
c==d的结果为false

这个是多年前笔试很容易考到的.

Java结构型设计模式-享元设计模式 是一种软件设计模式,属结构型设计模式。类似于外观模式适配器模式和装饰模式。这个角色为具体享元角色规定了必须实现的方法,‌在Java中可以是抽象类或接口。‌它定义了享元对象的接口,‌但不涉及具体的实现细节。‌享元模式适用于存在大量相似对象的场景,‌特别是当对象的内部状态较少并且可以共享时。‌这种模式通过内部状态和外部状态的分离,‌使得外部状态的改变可以在外部进行设置,‌尽管这可能会带来一定的复杂性,‌但总体而言,‌享元模式在处理大量相似对象时表现出色。‌。 阅读详情

相关推荐

在 Ubuntu 上安装和配置 PostgreSQL 实录

本文介绍了在Ubuntu系统上安装和配置PostgreSQL数据库的完整步骤。主要内容包括:1)通过官方源或PPA源安装最新版本;2)修改配置文件(postgresql.conf和pg_hba.conf)以允许远程访问;3)设置postgres用户密码;4)创建新用户并配置权限;5)防火墙设置和重启服务;6)验证安装和远程连接方法。文章提供了详细的命令行操作指导,帮助用户完成从安装到远程访问的全部配置过程。

qq_58168857的博客 1207

享元设计模式在Java坦克游戏中的应用

写坦克游戏,玩转23种设计模式Java趣味编程。大家好!我是Java小卷。本节咱一起来聊聊享元设计模式在Java趣味编程学习中的应用。

felix_alone2012的博客 849

别再死记硬背Payload了!深入理解Flask/Jinja2 SSTI的Python对象继承链与魔术方法

本文深入解析Flask/Jinja2 SSTI漏洞的底层原理,从Python对象模型出发,详细讲解如何通过魔术方法链实现RCE。文章揭示了Python对象继承链与魔术方法的精妙设计,提供了防御与绕过SSTI漏洞的实用技巧,帮助开发者深入理解漏洞本质并采取有效防护措施。

weixin_42525738的博客 356

[Java笔记]基本数据的自动拆装箱及享元设计模式

在J2SE 5.0之前,对基本数据类型进行打包,需要显示转化。例如:

陈曦的专栏 1万+

kubedns-coredns部署pod出现not ready问题

文章目录遇到的问题1、发现问题2、排查问题3、解决方法 coredns的实例health_check不通过的问题,排查和解决方法 遇到的问题 1、发现问题 pod启动但是未ready 查看是readiness失败 使用对应的URL进行curl,发现真的返回503 2、排查问题 查看错误日志,发现一堆这个错误"waiting on : kubernetes" 网上相关的问题解答 这个跟测试场景不一样,这个案例是开了防火墙,可以确认我这个案例的机器没有开防火墙,但它提醒了一点,coredns是需要访问ap

u012533481的博客 2844

更新3ds时和用读卡器读取传输文件操作不当导致的tf卡损坏无法读取需要格式化时出现的问题以及不想丢失文件并且修复的详细解决方法

前言: 不小心按了同意更新而且tf/sd卡损坏导致了3ds打开后都是出现 Anerror has occurred:(红色的) Failed to apply 1 FIRM patch(es). Press any button to shotdown 这样的画面,按了任意键后就关机,我找了很多资料和大佬的回答解决了这些问题,现在记录一下。 一.不小心按了更新导致上述的画面 原因:是因为系统升级了,但是里面的Luma3DS还没有更新,属于是更新了但没有完全更新的状态。 **修复方法** 1.首先请按

give_me_fish的博客 1万+

Java享元设计模式

Java享元设计模式 定义、对应角色、优缺点、应用场景、实例

专注Java领域与微服务架构,热爱人工智能与深度学习 391

XIAO ESP32S3 Sense摄像头与麦克风实战:从硬件连接到AI语音视觉项目

本文详细介绍了如何使用Seeed Studio XIAO ESP32S3 Sense开发板进行AI语音视觉项目开发。从硬件连接到Arduino环境搭建,再到摄像头拍照、视频流传输、麦克风录音等实战操作,最后引导读者探索基于TensorFlow Lite Micro的语音唤醒和SenseCraft AI的图像识别等AI应用,为物联网和边缘AI项目提供了完整的入门指南。

xray4的博客 1023

Java中的享元(flyweight)设计模式

问题: 如果利用java5自动装配特性定义两个对象: Integer i1 = 13; Integer i2 = 13; 那么,这两个对象是不是同一个对象呢? System.out.print(i1==i2); 结果是true,还是false? 如果这样定义: Integer i1 = 137; Integer i2 = 137; 结果又是什么? 答案

元新星的博客 440

OpenClaw用户必看:每天0成本使用OpenClaw!NVIDIA NIM免费大模型接入教程

🚀 OpenClaw接入NVIDIA NIM免费API!glm5、minimax-m2.5等大量模型任选,0成本升级AI助手!💰

XiaoqiangClub的博客 5578

matlab 一维相位解缠

一维相位解缠算法的matlab代码实现。

点云侠的博客 372

java享元设计模式

享元设计模式:(Flyweight Pattern) 享元设计模式使用共享对象,用来尽可能减少内春使用以及分享资源 给尽可能多的相似对象;它适用与当大量对象是重复而导致无法令人接受 的大量内存。通常对象中的部分状态是可以分享的。常见做法是把它们放 在外部数据结构,当需要使用时再将它们传递给享元。 (运用享元技术有效的支持大量细粒度的对象) 把一个字节内的整数缓存在整

成埃的博客 301

【AUTOSAR-E2E】-1.4-详述E2E Transformer解决方案

共13页精讲 目录 1“Data Transformation”介绍 1.1 基于SOME/IP Transformer 1.2 基于COM Based Transformer 2 ComXf(COM Based Transformer)介绍 2.1 ComXf(COM Based Transformer)功能规范 2.2 ComXf(COM Based Transformer)提供的服务 2.3 配置注意事项 3 E2EXf(E2E Transformer)介绍 3.1 E2EX...

「汽车电子助手」的博客 4700

设计模式最佳实践代码总结 - 结构型设计模式篇 - 享元设计模式最佳实践

首先,我们定义一个简单的享元接口。

lw的博客 1213

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32F407中文手册

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

java 设计模式学习笔记十一flyweight享元设计模式

flyweight享元设计模式 避免拥有相同内容的小类的开销,共享一个元类 示例代码如下: /** * 抽象数据类型 * * @time 下午09:25:37 * @author retacn yue * @Email zhenhuayue@sina.com */ public interface ExtrinsicState { } /** * flyweight接口 ...

retacn_yue的专栏 96

Camera2Demo

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

java设计模式八 享元

享元对象的内部状态通过状态对象表示,状态对象的变化不会影响享元对象的身份,从而维持享元的共享特性。1. **与工厂模式结合**:如之前提到的,享元工厂负责创建和管理享元对象,这是工厂模式的一个典型应用。3. **缓存管理**:对于内存敏感的应用,可以实施更精细的缓存管理策略,比如设置缓存上限,当缓存超出限制时,根据某种策略(如最近最少使用LRU)移除部分享元对象。3. **初始化成本**:虽然享元模式能减少运行时的内存消耗,但如果享元对象的创建成本很高,初始化大量享元可能会影响程序的启动时间。

hummhumm的专栏 585

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

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

java 享元设计模式_JAVA 设计模式 享元模式

目录用途享元模式 (Flyweight)运用共享技术有效地支持大量细粒度的对象。享元模式是一种结构型模式。结构图-享元模式结构图Flyweight: 它是所有具体享元类的超类或接口,通过这个接口,Flyweight 可以接受并作用于外部状态。abstractclassFlyweight{publicabstractvoidOperation(intextrinsicstates);}...

weixin_39975261的博客 146

java高新技术-基本数据类型拆装箱及享元设计模式

享元设计模式 public static void main(String[] args) { Integer iObj = 3; //自动装箱 System.out.println(iObj + 12); //自动拆箱 Integer i1 = 13; Integer i2 = 13; ...

ankan7400的博客 154

Java设计模式之享元flyweight模式代码示例

学亮编程手记 502

09【享元设计模式】_享元模式火车票

享元模式(Flyweight Pattern):享元模式主要的任务就是减少对象创建的数量,其宗旨是共享细粒度的对象,将多个对同一对象的访问集中起来,不必为每一个访问者都创建一个单独的对象,以减少内存占用和提高性能。Tips:享元的本质就是缓存共享对象,降低内存消耗;享元模式其实是工厂模式的一个改进机制,享元模式同样要求创建一个或一组对象,并且就是通过工厂方法模板生成的对象,只不过享元模式对工厂模式进行了改进,将重点放在了如何共享多个对象的访问,而不是重点考虑如何创建对象;

2401_89821809的博客 967

Java设计模式之享元(Flyweight)模式

享元(Flyweight)模式通过共享对象来最小化内存使用和实例化对象的数量。

小虎哥的技术博客 189

JAVA设计模式(十一)设计模式之享元设计模式

前言 本章讲解设计模式中享元模式的相关知识 方法 1.概念 不知道大家还记不记得之前学过的单例设计模式! 单例模式:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 单例模式保证的是该类的创建及其复杂的条件下,避免重复的创建而采用的设计模式,该类(属性)是固定的! 但是日常生活中一些对象之间有一些相对不变的属性和一些总是变化的属性。如围棋棋子: 那么关于棋...

jwang的博客 211

Java 设计模式之【享元】学习与掌握

文章目录定义优点缺点模式结构与实现模式结构模式的实现应用场景 定义 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。 优点 相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。 缺点 读取享元模式的外部状态会使得运行时间稍微变长。 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。 模式结构与实现 享元模式的定义提出了两个要求

活在当下!输出快乐! 400

java 设计模式(单例,享元,策略)

读书不觉已春深,一寸光阴一寸金。 java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问...

We_chuan的博客 510
上一篇: java 组合设计模式
下一篇: java基础面试题 String,Stringbuffer,Stringbuilder三者的区别
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值