• JAVA-初步认识-第八章-单例设计模式-懒汉式


    一.

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

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

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

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

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

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

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

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

    二.

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

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

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

  • 相关阅读:
    推荐一个博客,或许给技术流的自己一些启示
    Boost多线程-替换MFC线程
    Python:Matplotlib 画曲线和柱状图(Code)
    AI:机器人与关键技术--总是被科普
    OnLineML一:关于Jubatus 的简介...
    使用PCL::GPU::遇到问题
    dll文件:关于MFC程序不能定位输入点
    实践:使用FLANN.LSH进行检索
    模式识别两种方法:知识和数据
    几个方便编程的C++特性
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7717744.html
Copyright © 2020-2023  润新知