在开发中,我们经常用到,且一定要用到的一个设计模式就是单例模式。但是想要写好用好它也不容易。
简单的单例模式
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");
}
}