实现一个单例有两点注意事项
①将构造器私有,不允许外界通过构造器创建对象;
②通过公开的静态方法向外界返回类的唯一实例。
饿汉式
不管有没有实例,直接去创造实例
*
* 饿汉式单例:直接创建实例
* 私有的空构造方法
* 私有的实例
* 公共的静态获取实例方法
*/
public class HungrySingle {
private HungrySingle(){
}
private static HungrySingle instance=new HungrySingle();
public static HungrySingle getInstance(){
return instance;
}
}
懒汉式
先判断有没有实例,如果已经存在实例不再创建,没有再去创建实例。
/*
* 懒汉式单例:没有实例才去创建
*/
public class LazySingleton {
private static LazySingleton instance=null;
private LazySingleton(){
}
public static synchronized LazySingleton getInstance(){
if (instance==null)
instance = new LazySingleton();
return instance;
}
}
静态内部类
这种方式:线程安全,调用效率高,并且实现了延时加载!
/*
* 静态内部类单例
* 这种方式:线程安全,调用效率高,并且实现了延时加载!
*/
public class StaticInnerSingleton {
private StaticInnerSingleton(){}
private static class Singleton{
private static final StaticInnerSingleton instance=new StaticInnerSingleton();
}
public static StaticInnerSingleton getInstance(){
return Singleton.instance;
}
}