单例模式在编码时,可分成 饿汉和懒汉;
饿汉式:当类进行初始化的时候,为该类分配内存,并创建对象。
懒汉式:当类进行初始化的时候,对象不创建,等到使用的时候才创建。
写饿汉式,记得如下:
1. 保证单例,即构造方法得私有
2. 变量需要是 static 和 final ,并且为变量直接创建对象(static可方便方法直接获取,final保证对象引用不可变)
3. 获取 该类对象的方法必须是static的
代码如下:
public class HungrySingle { private static final HungrySingle hs = new HungrySingle(); private HungrySingle(){} public static HungrySingle getInstance(){ return hs; } }
写双重检查懒汉式,记得如下:
1. 保证单例,即构造方法得私有
2. 变量需要是 static 和 volatile,不需要提前赋值。(static可方便方法直接获取,volatile避免指令重排序)
3. 获取 该类对象的方法必须是static的
4. 方法内部进行 双重判断 内架 一个 同步代码块。
代码如下:
public class LazySingle { private static volatile LazySingle lazySingle; private LazySingle(){} public static LazySingle getInstance(){ if(lazySingle == null){ synchronized (LazySingle.class){ if(lazySingle == null){ lazySingle = new LazySingle(); } } } return lazySingle; } }
对上面代码有不惑可参考:https://blog.csdn.net/yeyazhishang/article/details/90445330