单例模式:生成只存在一个的实例
饿汉模式
public class Singleton {
/* 在类装载的时候就完成实例化 */
private static Singleton instance = new Singleton();
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 获取单例实例 */
public static Singleton getInstance() {
return instance;
}
}
懒汉模式(双重检查)
优点:线程安全;延迟加载;效率较高。
public class Singleton {
/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
private static volatile Singleton instance = null;
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 1:懒汉式,静态工程方法,创建实例 */
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
静态内部类
与饿汉模式实例机制相似,静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。
优点:避免了线程不安全,延迟加载,效率高。
public class Singleton {
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
private static class SingletonInstance {
private static final Singleton instance = new Singleton();
}
/* 获取单例实例 */
public static Singleton getInstance() {
return SingletonInstance.instance;
}
}