zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第八章-单例设计模式-懒汉式

    一.

    上面截图中体现了单例设计模式的基本表现形式,就是通过三步来实现的。(饿汉式)

    单例还有另外的表现形式。

    刚开始在成员变量上,并没有进行对象的建立,只是先创建好了引用。在调用方法的时候,在调用方法当中,做了一个动作。感觉这个if语句有点多余

    这两种方式都能完成单例设计模式的解决方案,两者的区别在哪?

    (截图中,第一句中是定义Single2类类型成员变量,用了private修饰。接着,下面的getInstance()方法中的if判断语句里,也有一个s,这里的s没有做任何的定义,可能就是上面所说的s?这里难道是private的功能,只供本类访问?)

    single这个类在加载进内存的时候,已经建好内存了,因为s是静态的,它会随着类的加载而加载(非静态的呢?会随着类的加载而加载么?),加载完了后,就要进行初始化。这就是我们说的,类一加载对象就已经存在。

     但是另一种语句,类加载进来,s的值是null空。什么时候有对象?只有调用getInstance()方法的时候,对象才会在堆内存中生成。

    这种方式称为单例设计模式的延迟加载形式。(懒汉式)

    二.

    真正开发的时候,我们应该采取什么方式?采用饿汉式比较多。原因在于,无论是先加载还是后加载,最终我们的目的还是为了获取这个唯一的对象,不可能不获取对象,所以直接开始就创建对象就行了。

    懒汉式存在一些问题:如果后期它被另外一种技术所操作时,(这种技术叫多线程技术),如果它要被多线程并发访问的时候,有可能保证不了对象的唯一性。它存在着安全的隐患,这时候就需要改变代码,直到安全为止,这时效率就降低了。

    面试的时候,几乎面试的都是懒汉式。里面涉及的知识点非常的多,开发时走的饿汉式比较多,

  • 相关阅读:
    蓝桥杯 全球变暖(dfs)
    Bzoj3196 Tyvj 1730 二逼平衡树
    Bzoj3110 [Zjoi2013]K大数查询
    Bzoj4004 [JLOI2015]装备购买
    Bzoj2115 [Wc2011] Xor
    Bzoj1257 [CQOI2007]余数之和sum
    HDU1724 Ellipse
    Bzoj2178 圆的面积并
    SPOJ CIRU The area of the union of circles
    CodeForces 232E.Quick Tortoise
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7717744.html
Copyright © 2011-2022 走看看