单例模式是常见的设计模式之一,很多框架或业务实现都会用到。单例顾名思义就是单个实例,在设计模式中,单利通常有两种实现方式:懒汉式和饿汉式
//饿汉式单利
public class Singletion1 {
private static final Singletion1 instance = new Singletion1();
private Singletion1(){}
public static Singletion1 getInstance(){
return instance;
}
}
//懒汉式单利
public class Singletion2 {
private static Singletion2 instance;
public Singletion2(){}
public static Singletion2 getInstance(){
if(instance == null){
synchronized(Singletion2.class){
if(instance == null){
instance = new Singletion2();
}
}
}
return instance;
}
}
在Java中,实例化一个类的入口是构造器,上面两种实现方式有一个重要的共同点就是将构造器私有化,这样就屏蔽了外界对类的实例化权限(反射暴力实例化不在此处讨论),只有在类内部才能创建该类的实例,这样就增强或者说实现了单例的必要条件。
JDK1.5引入了枚举类型,利用含有单个元素的枚举来实现单例已经成为实现单例的最佳方法
//枚举单例
public enum Singletion3 {
INSTANCE;
public static Singletion3 getInstance(){
return INSTANCE;
}
}
利用枚举实现的单例,在写法上更简洁,在实现上更安全。