单例模式
简单的单例模式
public class Student{
private static Student mStudent=new Student();private Student(){ } public static Student getStudent(){ return mStudent; }
}
这种写法最好不要。
进阶写法
public class Student{
private static Student instantce;private Student(){ } public static synchronized Student getInstancce(){ if(instantce == null){ instance = new Student(); } return mStudent; }
}
这种相对于1肯定好很多
完善写法
public class Student{ private static Student instantce; private Student(){ } public static Student getInstancce(){ if(instantce == null){ synchronized(Student.class){ if(instance == null){ instance = new Student(); } } } return mStudent; } }
推荐写法
public class Student { private Student() { } public static Student getInstance() { return StudentHolder.mInstance; } /** * 静态内部类 */ private static class StudentHolder { private static final Student mInstance = new Student(); } }
当第一次加载Student类的时候并不会初始化mInstance,只有在第一次调用Student的getInstance()方法的时候才会导致mInstance被初始化。因此,第一次调用getInsatance方法会导致虚拟机加载StudentHolder类,这种方法保证了线程安全。和对象的唯一性。,同时也延迟了单例的实例化。
枚举单例
public enum SingletonEmun{ INSTANCE; public void soSomthing(){ System.out.println("do something"); } }