单例模式,指的是一个类有且只有一个实例。
单例模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
单例模式主要有五种常用的创建方式,
一:懒汉式创建方式
特点:第一次调用才初始化,避免内存浪费。
/*
* 懒汉式创建单例模式 由于懒汉式是非线程安全, 所以加上线程锁保证线程安全
*/
private static Play play = null;
public static synchronized Play getPlay() {
if (play == null) {
play = new Play();
}
return play;
}
二:饿汉式创建方式
特点:类加载时就初始化,线程安全
// 构造方法私有化
private Play() {
}
// 饿汉式创建单例对象
private static Play play = new Play();
public static Play getPlay() {
return play;
}
三:双重检验锁(double check lock)(DCL)
特点:安全且在多线程情况下能保持高性能
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
四:静态内部类
特点:效果类似DCL,只适用于静态域
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
五:枚举
特点:自动支持序列化机制,绝对防止多次实例化
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}