1. 程式人生 > >單例模式和靜態類的區別對比

單例模式和靜態類的區別對比

  1. 什麼是單例模式 單例模式指的是在應用***整個生命週期內只能存在一個例項。***單例模式是一種被廣泛使用的設計模式。他有很多好處,能夠避免例項物件的重複建立,減少建立例項的系統開銷,節省記憶體。

  2. 單例模式和靜態類的區別 首先理解一下什麼是靜態類,靜態類就是一個類裡面都是靜態方法和靜態field,構造器被private修飾,因此不能被例項化。Math類就是一個靜態類。

知道了什麼是靜態類後,來說一下他們兩者之間的區別:

1)首先單例模式會提供給你一個全域性唯一的物件,靜態類只是提供給你很多靜態方法,這些方法不用建立物件,通過類就可以直接呼叫;

2)單例模式的靈活性更高,方法可以被override,因為靜態類都是靜態方法,所以不能被override;

3)如果是一個非常重的物件,單例模式可以懶載入,靜態類就無法做到;

那麼時候時候應該用靜態類,什麼時候應該用單例模式呢?首先如果你只是想使用一些工具方法,那麼最好用靜態類,靜態類比單例類更快,因為靜態的繫結是在編譯期進行的。***如果你要維護狀態資訊,或者訪問資源時,應該選用單例模式。***還可以這樣說,當你需要面向物件的能力時(比如繼承、多型)時,選用單例類,當你僅僅是提供一些方法時選用靜態類。

3.如何實現單例模式

  1. 餓漢模式

所謂餓漢模式就是立即載入,一般情況下再呼叫getInstancef方法之前就已經產生了例項,也就是在類載入的時候已經產生了。這種模式的缺點很明顯,就是佔用資源,當單例類很大的時候,其實我們是想使用的時候再產生例項。因此這種方式適合佔用資源少,在初始化的時候就會被用到的類。

class SingletonHungary {
    private static SingletonHungary singletonHungary = new SingletonHungary();
    //將構造器設定為private禁止通過new進行例項化
    private SingletonHungary() {

    }
    public static SingletonHungary getInstance() {
        return singletonHungary;
    }
}