package com.kero99.ygc.singleton;

public class Singleton {
    /**
     * 定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
     * 场景:建立目录、数据库连接需要单线程操作的场合,用于实现对系统资源的控制。
     * 饿汉式单例:类加载,就进行对象实例化。
     * 懒汉式单例:第一次引用类时,才进行对象实例化。
     * 单例模式优缺点:只有一个实例减少内存开支,但是无法创建子类扩展困难。
     * 饿汉比较懒汉:饿汉速度快,懒汉资源利用比饿汉好。
     */
    //饿汉模式 
//  private static Singleton s=new Singleton(); 
//  private Singleton(){ //构造方法私有确保外界无法实例化类
//  }
//  static Singleton getInstance(){ //通过该方法获得实例对象
//      return s;
//  }
    //懒汉模式
    private static Singleton s=null;
    private Singleton(){
    }
    //方法同步
    synchronized public static Singleton getInstance(){
        if(s==null){
        //如果s 为 true 时 不同步则A B 都会创建一个对象 就违反了单例模式 synchronize 同步则不会出现这种情况
            s=new Singleton();
        }
        return s;
    }

}