单例模式分为两种:
懒汉模式和饿汉模式:
/**饿汉模式 * @author 夜尽 * @date 2018/5/20 22:16 */ public class Single1 { //1.首先是私有的构造方法,不允许外界实例对象 private Single1(){ } //2.创建类的唯一,私有实例: private static Single1 instance = new Single1(); //3.提供共有方法让外界获得实例: public static Single1 getInstance(){ return instance; } }
static被成为类方法,类变量,在类加载的时候便存在了实例。
而懒汉模式:
/**懒汉模式 * @author 夜尽 * @date 2018/5/20 22:21 */ public class Single2 { //私有的构造方法: private Single2(){ } //类的唯一实例 private static Single2 instance; //外界获得实例的方法 public static Single2 getInstance(){ if(instance==null){ instance = new Single2(); } return instance; } }
实在使用get方法的时候进行的实例。
两者对比的话,一个是类加载慢,一个是获得实例慢。
另外,恶汉模式是线程安全的,而懒汉模式不是。