定義 :

確保一個類別只有一個實體,並給它一個存取的全域點(Global Point)

 

使用案例 :

有需要用到全域變數的時候,而且只需要一個而不是要使用的時候就生一個出來導致占用資源過多,這時候解決方法是使用靜態變數(static),但是靜態變數必須在物件initialize的時候就建好,可是這麼早建可能不會用到它,所以singleton讓使用者在物件被需要的時候才會建立物件。

 

圖片來源 :  Unity Dojo

 

實作 : 

典型的Instance通常會以private static的方式儲存,通常會在初始化的時候就被建立,有時候會在物件第一次被呼叫的時候才建立(Lazy Instantiaze)。

public final class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

 

Lazy Instantiaze (拖延實體化)

public class Singleton {
    
    private static Singleton instance = null;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton ();
        }
        return instance;
    }
}

 

 

缺點 :

最被人詬病的地方就是因為Static是全域變數,會使Coupling提高

 

來源參考 : wiki

 

arrow
arrow
    文章標籤
    Singleton
    全站熱搜

    橘子亂說話 發表在 痞客邦 留言(0) 人氣()