登录社区云,与社区用户共同成长
邀请您加入社区
享元模式是一种结构型设计模式,通过共享对象来有效支持大量细粒度对象。它将对象状态分为内部状态(固定可共享)和外部状态(可变不可共享),通过享元工厂管理共享对象。该模式适用于对象数量多且相似的情况,能显著减少内存占用和对象创建开销,但会增加系统复杂度。文中以围棋棋子为例展示了代码实现,并对比了单例、原型等模式,指出其核心优势在于对象复用。Java的Integer缓存机制是典型应用。
本文系统阐述了不可变对象与享元模式在并发编程中的应用。首先详细解析了不可变对象的定义、线程安全原理及实现规范,重点介绍了保护性拷贝技术及其在JDK中的典型应用。其次深入探讨了享元模式的核心概念、设计原则和实现方法,包括在JUC中的实际应用案例。最后通过一个极简连接池的完整实现,展示了如何基于BlockingQueue等JUC组件构建线程安全的资源池,详细说明了连接获取、归还及关闭的核心流程。文章强
前言:享元模式(Flyweight Pattern)是Java设计模式中最实用的“内存优化神器”之一,属于结构型模式,核心是“通过共享技术复用大量细粒度的相似对象,减少对象创建数量,降低内存占用”。很多Java开发者在面对高并发、大量重复对象的场景(如游戏棋子、字符串常量、数据库连接池)时,容易写出“创建大量重复对象”的臃肿代码,导致内存飙升、系统性能下降;面试时被问到“享元模式的核心是什么”“J
摘要:单例模式和享元模式都能减少对象创建、节约内存,但单例保证的是“全类唯一实例”,享元实现的是“每种内部状态一个共享实例”。本文从文本编辑器字符共享和数据库连接池两个场景出发,结合代码对比、UML 分析和 Integer.valueOf()、Spring 单例 Bean 等 JDK 源码,帮你彻底分清这对“节约资源型”模式。
摘要:享元模式和对象池模式都能减少对象创建、节约内存,但享元的核心是不可变对象的共享——相同内部状态的客户端拿到的是同一个只读实例;对象池的核心是可变对象的复用——客户端借出、用完归还,对象状态随时变化。本文从字符共享和数据库连接池两个场景出发,结合代码对比、UML 分析和 Integer.valueOf()、HikariCP 等 JDK 源码,帮你彻底分清这对“池化型”模式。