1.什么是单例模式
单例模式在深入浅出设计模式中给出的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2.单例模式的实现方法
- 饿汉式
/**
* 饿汉式单例
*/
public class Singleton1 {
private final static Singleton1 singleton1 = new Singleton1();
private Singleton1(){}
public static Singleton1 getInstance(){
return singleton1;
}
}
优点:线程安全,写法简单
缺点:不是懒加载,可能造成内存浪费
- 懒汉式(DCL+V)
/**
* 懒汉式
*/
public class Singleton2 {
private static volatile Singleton2 instance = null ;
private Singleton2(){}
public static Singleton2 getInstance(){
if(instance == null){
synchronized (Singleton2.class){
if(instance==null){
instance = new Singleton2();
}
}
}
return instance;
}
}
优点:线程安全,懒加载
缺点:使用同步锁,效率不是很高
- 静态内部类
/**
* 静态内部类
* @author niulijuan
* @create 2018/10/13
*/
public class Singleton3 {
private Singleton3(){}
private static class SingletonInstance{
private static final Singleton3 instance = new Singleton3();
}
public static Singleton3 getInstance(){
return SingletonInstance.instance;
}
}
优点:线程安全,懒加载,效率较好
枚举
/**
* 枚举
*/
public enum Singleton4 {
INSTABNECE;
}
优点:线程安全,效率好,简单
缺点:不是懒加载