1.概念
单例模式是指确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。
2.实现方式
2.1 普通实现方式:分为饿汉式和懒汉式。
2.1.1饿汉式:
特点:
1.随着类加载的同时创建对象
2.线程安全
1.类中创建静态的私有的本类对象,并实例化,防止外界访问,
2.将构造方法私有,防止外界访问,
3.为外界提供公共的静态方法,方便访问类中实例。
普通标准代码:
public class Student {
    private static Student s = new Student();
    private Student(){
    }
    public static Student getStudent(){
        return s;
    }
}
Java中的单例模式体现:Runtime类
2.1.2懒汉式:
特点:
1.使用时创建对象
2.线程不安全
1.类中创建静态的私有的本类对象,
2.将构造方法私有,防止外界访问,
3.为外界提供公共的静态方法,外界调用该方法时判断静态变量是否为null,为null, 实例化,并返回值;不为null,直接返回值。
public class Teacher {
    private static Teacher teacher = null;
    private Teacher(){
        //Runtime.getRuntime();
    }
    public static synchronized Teacher getTeacher(){
        if(teacher == null)
            teacher = new Teacher();
        return teacher;
    }   
}
由于懒汉式会有线程安全的问题,所以开发过程中一般用饿汉式,不推荐懒汉式。
2.2 进阶实现方式:DCL方式和静态内部类方式
2.2.1 Double CheckLock方式
2.2.2 静态内部类方式
DCL方式虽然在一定程度上解决了资源消耗、多余的同步、线程安全等问题,但还是会有双重检查锁定失效的问题。而静态内部类方式,当第一次加载Singleton类时,并不会初始化sInstance,只有在第一次调用Singleton的getInstance()方法时才会使sInstance初始化。
public class Singleton {
    private Singleton(){}
    public static Singleton getInstance(){
        return SingletonHolder.sInstance;
    }
    private static class SingletonHolder{
        private  static final Singleton sInstance = new Singleton();
    }
}