单例的好处
单例模式适合于应用中频繁创建的对象,如果是重量级的对象,更应该使用单例模式。比如配置文件,如果不采用单例模式的话,每个配置文件对象的内容都是一样的,创建重复的对象就会浪费宝贵的内存,所以有必要使用单例模式,达到性能的提升,减小了内存的开销和GC的压力。本文会一步一步由浅入深的讨论如何实现正确的单例模式。
单例模式的一般写法
饿汉式
public class HungryMode {
private static HungryMode sHungryMode = new HungryMode();
private HungryMode() {
System.out.println("create " + getClass().getSimpleName());
}
public static void fun(){
System.out.println("call fun in HungryMode");
}
public static HungryMode getInstance(){
return sHungryMode;
}
public static void main(String[] args) {
HungryMode.fun();
}
}
如果这个对象的构造方法很复杂的话,这样的单例写法会造成类加载很慢,并且会浪费很多性能,所以我们需要懒加载,也就是所谓的懒汉式加载
懒汉式
public class LazyMode {
private static LazyMode sLazyMode;
private LazyMode() {
System.out.println("create " + getClass().getSimpleName());
}
public static LazyMode getInstance(){
if (sLazyMode == null) {
sLazyMode = new LazyMode();
}
return sLazyMode;
}
public static void main(String[] args) {
LazyMode.getInstance();
}
}