前一段时间发布了 handler 学习理解的过程,中间提到了享元设计模式,有人私信问我享元设计模式的理解所以出今天的文章!
基本含义:享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
以上是官方意思
以下我的理解意思:使用共享技术让我们把内存节省出来,使其我们代码健壮性能提高!
运用的实例:1、JAVA 中的 String。 2、数据库的数据池。
为啥要用呢:如果仔细读以上基本含义就知道了大概,主要解决当有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。对再次要抓住关键词语,避免重新创建 这就是精髓 。接下里用实例给你理解
JAVA 中的 String的 :String对象是不变对象,一旦创建出来就不会改变了,如果需要改变某一个字符串的值,就必须创建一个新的String对象
public String A = "啊哈哈哈" ;
public String B = "啊哈哈哈";
在JVM内部, String对象都是共享的。如果一个系统中有两个String对象所包含的字符串相同的话(A 和 B),JVM实际上只创建一个String对象提供给两个引用(A 和B是一个对象),从 而实现String对象的共享,String的inern()方法给出这个字符串在共享池中的唯一实例. 在这提一下String 注意对比时候(equal:是用来比较两个对象内部的内容是否相等的 == :是用来比较两个对象地址是否相同)
通过以上咱理解了啥是享元设计模式了接下来改总结了!
啥时候使用:
1、系统中有大量对象。
2、对象消耗大量内存。
3、对象的状态大部分可以外部化。
4、对象可以相互代替的,都可以用一个对象来代替。
5、有足够多的享元进行共享
优点:显而易见的减少对象的创建,降低系统的内存,代码健壮性能提高。
缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。
注意解决: 1、注意划分外部状态和内部状态,否则可能会引起线程安全问题。 2、这些类必须有一个工厂对象加以控制。