设计模式8-Flyweight
本文最后更新于:3 years ago
享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于 结构型模式 ,它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
如果想了解享元模式的具体的介绍,菜鸟教程介绍得比较详细↓
菜鸟教程-享元模式
结构图
优缺点
优点: 大大减少对象的创建,降低系统的内存,使效率提高。
缺点: 提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。
使用场景
1、系统有大量相似对象。
2、需要缓冲池的场景。
实现代码
享元模式比较简单,就是重复利用对象,是一种”池”的思想。
这里我就直接介绍一下java中的享元模式。
1 |
|
输出结果
1 |
|
解释一下为什么
在Java中,字符串都放在一个常量池中,s1与s2,其实指向的就是同一个对象,所以为true;
而s3和s4都是在堆栈中new出来的String对象,那么s3和s4的地址肯定是不一样的,所以s1!=s3,s3!=s4;
intern() 方法返回字符串对象的规范化表示形式
intern()作用就是去拿常量池中的字符串。如果new出来的是常量的话,那么在堆栈中就指向这个字符串,所以s3.intern()==s1,s3.intern()==s4.intern()
单个享元模式是很好理解的,难度大一点的享元模式是和上一章学的Composite(组合模式)结合的。
图中,A、B…为叶子节点,ABBAAB可以理解为子节点,但是他们共同组成了享元模式。
这就是享元模式+组合模式的应用,这里就不多扩展了,主要还是了解享元模式。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!