享元模式通过共享来支持对象的复用,减少资源的浪费。从享元池中获取想要的对象。
(1)类图
解释类图,共有四个类:
左下角的白条中写的是:如果享元池中存在该对象则返回该对象,否则就创建一个新的对象放进享元池,再返回。
享元对象是用HashMap存储,构成享元池。
空心三角形+箭头指的是实现。
比如下棋程序,有黑白两种棋子,它们的形状、大小都一样,如果在每放置一枚棋子的时候就创建一个棋子对象,那么对性能就有所浪费。如果采用享元模式,享元池内只会存在黑棋子和白棋子两个元素。
内部状态和外部状态,还有非共享具体享元类,这些都看具体情况去设计。比如上面的下棋程序就没有用到这三者。
享元模式的核心在于享元池,能从享元池得到特定的对象元素。就像下棋程序那样,要找出对象之间这种特定的关系,这些对象很多都是相同或相似的,每次从享元池可以作为同一个对象拿出来。
String类就用到了享元模式,当字符串内容一致的时候,在享元池内就属于同一个对象,当字符串内容不一致的时候,在享元池内就分别存储于不同的对象。
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/245357.html