//单例模式使用场景:1.固定配置类 2.某种比较耗费资源的连接
class Dajia{

    //知识点1:私有化构造器,使得外部无法new对象,只能从我这获取
    private Dajia(){

    }
    //使用懒汉式,懒加载,不用的时候减小内存开销
    private static Dajia dajia = null;
    //知识点2:提供工厂方法,将这个对象给你
    public static Dajia dajia(){
        //知识点3:第一判断非空的作用是提高效率,防止下一次来访问时不需要每次都锁住方法或代码块获取单例
        if(dajia == null){
            //知识点4:要用到class锁,因为当前对象未被创建,锁是为了防止出现多个实例对象
            synchronized (Dajia.class){
                //知识点5:第二重判断非空是为了防止返回空的对象
                if(dajia == null){
                    dajia = new Dajia();
                }
            }
        }
        return dajia;
    }

}