享元模式 (Flyweight Pattern)

享元模式通过共享来支持对象的复用,减少资源的浪费。从享元池中获取想要的对象。

 

解释类图,共有四个类: 

 

左下角的白条中写的是:如果享元池中存在该对象则返回该对象,否则就创建一个新的对象放进享元池,再返回。

享元对象是用HashMap存储,构成享元池。

 

比如下棋程序,有黑白两种棋子,它们的形状、大小都一样,如果在每放置一枚棋子的时候就创建一个棋子对象,那么对性能就有所浪费。如果采用享元模式,享元池内只会存在黑棋子和白棋子两个元素。

 

内部状态和外部状态,还有非共享具体享元类,这些都看具体情况去设计。比如上面的下棋程序就没有用到这三者。

享元模式的核心在于享元池,能从享元池得到特定的对象元素。就像下棋程序那样,要找出对象之间这种特定的关系,这些对象很多都是相同或相似的,每次从享元池可以作为同一个对象拿出来。

String类就用到了享元模式,当字符串内容一致的时候,在享元池内就属于同一个对象,当字符串内容不一致的时候,在享元池内就分别存储于不同的对象。

 享元模式的作用很明显,模式本身就是对特定的场景下提供的一种解决方案,相同的对象只会保存一份,降低系统存储的压力。

posted @   HanselHuang  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示