zgq105 / blog

2 stars 0 forks source link

设计模式之单例模式 #31

Open zgq105 opened 5 years ago

zgq105 commented 5 years ago

image

1. 什么是单例模式?有什么作用?

单例模式是指保证整个引用只有一个对象实例。它的作用是保证全局唯一性。

2. 如何实现?

2.1 饿汉式实现

public class SingleInstance1 {
    private static final SingleInstance1 ourInstance = new SingleInstance1();

    public static SingleInstance1 getInstance() {
        return ourInstance;
    }

    private SingleInstance1() {
    }
}

2.2 懒汉式实现

public class SingleInstance2 {
    private static volatile SingleInstance2 mInstance;

    private SingleInstance2() {
    }

    public static SingleInstance2 getInstance() {
        if (mInstance == null) {
            synchronized (SingleInstance2.class) {
                if (mInstance == null) {
                    mInstance = new SingleInstance2();
                }
            }
        }
        return mInstance;
    }
}

2.3 静态内部类实现

public class SingleInstance3 {

    private SingleInstance3() {
    }

    private static class InnerClass {
        static final SingleInstance3 mInstance = new SingleInstance3();
    }

    public static SingleInstance3 getInstance() {
        return InnerClass.mInstance;
    }

}

3. JDK或Android的应用举例

在JDK中,NumberFormat#getInstance、Runtime#getRuntime使用的都是单例。在Android SDK中, LayoutInflater#from使用的是单例。

4. 小结

单例模式保证全局只有一个对象实例,避免频繁创建对象使用的开销,可以全局访问,方便调用。