享元模式 (Flyweight Pattern)
享元模式通过共享来支持对象的复用,减少资源的浪费。从享元池中获取想要的对象。
解释类图,共有四个类:
左下角的白条中写的是:如果享元池中存在该对象则返回该对象,否则就创建一个新的对象放进享元池,再返回。
享元对象是用HashMap存储,构成享元池。
比如下棋程序,有黑白两种棋子,它们的形状、大小都一样,如果在每放置一枚棋子的时候就创建一个棋子对象,那么对性能就有所浪费。如果采用享元模式,享元池内只会存在黑棋子和白棋子两个元素。
内部状态和外部状态,还有非共享具体享元类,这些都看具体情况去设计。比如上面的下棋程序就没有用到这三者。
享元模式的核心在于享元池,能从享元池得到特定的对象元素。就像下棋程序那样,要找出对象之间这种特定的关系,这些对象很多都是相同或相似的,每次从享元池可以作为同一个对象拿出来。
String类就用到了享元模式,当字符串内容一致的时候,在享元池内就属于同一个对象,当字符串内容不一致的时候,在享元池内就分别存储于不同的对象。
享元模式的作用很明显,模式本身就是对特定的场景下提供的一种解决方案,相同的对象只会保存一份,降低系统存储的压力。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了