单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
四点要求:唯一实例,多线程并发访问,效率性能,懒加载(Lazy Load,在需要的时候才被构造)
1、懒汉模式,线程不安全
public class SingletonKerriganA {
/**
* 单例对象实例
*/
private static SingletonKerriganA instance = null;
public static SingletonKerriganA getInstance() {
if (instance == null) {
instance = new SingletonKerriganA();
}
return instance;
}
}
2、懒汉模式,线程安全,但是效率低
public class SingletonKerriganB {
/**
* 单例对象实例
*/
private static SingletonKerriganB instance = null;
public synchronized static SingletonKerriganB getInstance() {
if (instance == null) {
instance = new SingletonKerriganB();
}
return instance;
}
}
3、饿汉模式
public class SingletonKerriganE {
/**
* 单例对象实例
*/
private static SingletonKerriganE instance = new SingletonKerriganE();
public static SingletonKerriganE getInstance() {
return instance;
}
}
4、静态内部类。懒汉模式,线程安全,性能好,应用多。
public class SingletonKerriganF {
private static class SingletonHolder {
/**
* 单例对象实例
*/
static final SingletonKerriganF INSTANCE = new SingletonKerriganF();
}
public static SingletonKerriganF getInstance() {
return SingletonHolder.INSTANCE;
}
}
实际开发中,我们应该记住:没有最好的单例模式,只有最合适的单例模式。