2017-04-05 21 views
-3

我是JAVA的新手。單身人士的目的和爲什麼我們需要私人構造函數

當我讀到singleton模式時,它需要一個第一次運行的實例。

類似的東西:

public class Singleton { 

    private static final Singleton instance = new Singleton(); 

    private Singleton(){} 

    public static Singleton getInstance(){ 
     return instance; 
    } 

} 

但我也寫類似的東西:

public class Singleton { 


    public Singleton(){} 
    //methods,.... 

} 

所以我有一些問題:

1)爲什麼我們在單需要一個實例?目的是什麼? 2)爲什麼singleton中的構造函數是私有的?我們如何才能爲這個班級提供投入?

我知道我的問題是非常基本的,而且聽到這麼沒有用。

但請幫我解釋一下。

感謝&問候

+2

這聽起來像你基本上需要了解更多關於單身模式是什麼。你的第二堂課根本不是單身人士。 –

+2

'當我閱讀關於單身模式時,它需要一個第一次運行的實例嗎?你讀完了單身人士嗎?您的問題通常在教程/課程中得到解答,因爲它們是單例模式背後的原理 – BackSlash

+1

[Singleton class in java]的可能重複(http://stackoverflow.com/questions/2111768/singleton-class-in-java) – freedev

回答

0

1)Singleton模式是一種設計模式,其中只有一個實例,即一個對象,貫穿程序的生命週期。因此,您需要將實例靜態化並初始化一次,以便在程序中只有一個對象。

2)構造函數必須是私有的,所以你不需要初始化對象。也就是說,當構造函數是私有的時候,你不能調用new Singleton(),因爲你不能從類之外訪問構造函數,因爲它是私有的。您可以通過,需要一些參數的靜態方法初始化輸入和建設的唯一實例

例如,當創建它們,請考慮以下

public class Singleton { 

    private static Singleton instance; 

    private String a; 
    private String b; 

    private Singleton(){} 

    private Singleton(String a, String b) { 
     this.a = a; 
     this.b = b; 
    } 

    public static Singleton getInstance(String a, String b){ 
     if (instance == null) 
      instance = new Singleton(a, b); 
     return instance; 
    } 

} 

希望這有助於!

0

不要在單使用公共構造函數。 單身的感覺是,你只有一個該類的實例。所以如果你有一個公共的構造函數,你不能保證只有一個實例。 您擁有隻在該類中被調用一次的私有構造函數,因此您只有一個實例。您可以通過getInstance-Method提供該實例。