美文网首页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