美文网首页Java 杂谈
设计模式之单例(Singleton)

设计模式之单例(Singleton)

作者: ikonan | 来源:发表于2018-07-20 09:23 被阅读2次

    单例的定义

    Singleton模式主要作用是保证在Java应用程序中一个类Class只存在一个实例。

    作用

    1. Singleton能够被无状态化,提供工具性质的功能
    2. Singleton可以节省内存,它限制了实例的个数,有利于Java的垃圾回收

    UML

    u=2748590673,1305504868&fm=27&gp=0.jpg

    代码示例

    • 第一种形式
    public class Singleton {
    
        private static Singleton instance = new Singleton();
        private Singleton() {}
    
        public static Singleton getInstance() {
            return instance;
        }
    
    }
    
    
    • 第二种形式(懒加载)
    public class Singleton {
    
        private static Singleton instance = null;
        private Singleton() {}
    
        public static synchronized Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    
    }
    
    
    • 说明

      1. 使用Singleton.getInstance() 可以访问单例类
      2. 上面的第二种形式是lazy initialization,也是第一次调用时初始化Singleton,以后就不再生成了。
      3. 注意到lazy initialization形式中的synchronized,这个synchronized 很重要,如果没有synchronized,那么getInstance()是有可能得道多个Singleton实例。
      4. 一般认为第一种形式要更加安全一些
      5. 在某些情况下,使用Singleton并不能达到Singleton的目的,如果有多个Singleton 对象同时被不同的类装入器装载:在EJB这样的分布式系统种也要注意这种情况,因为EJB是夸服务器的,跨JVM的。

      总之,如果你的应用是基于容器,那么Singleton模式少用或者不用。可以使用相关技术替代。

    相关文章

      网友评论

        本文标题:设计模式之单例(Singleton)

        本文链接:https://www.haomeiwen.com/subject/eycfmftx.html