我只是在試圖學習設計模式。所以我分析源代碼,但無法弄清楚爲什麼私有構造函數在單例模式中使用。任何人都可以幫助我理解原因嗎?Singleton模式中的私有構造函數
2
A
回答
2
具有private
知名度的構造函數只能從範圍內調用該類本身 - 僅自身構造是單例類的屬性之一。
5
假設你有這樣的(代碼是C#,但它並不重要)定義的單例類:
public sealed class Singleton
{
private static Singleton instance = null;
private static readonly object padlock = new object();
public Singleton() //with a public constructor
{
}
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
}
所以,你可以有你類的兩個實例:
var instance1 = Singleton.Instance;
var instance2 = new Singleton();
但模式本身是爲了避免多個副本。
0
任何成員函數(或方法)是由私人使得類的唯一成員函數具有在它的訪問或控制。所以,構造函數是私有的,只有成員函數可以調用構造函數,因此可以創建對象。
因爲getInstance或其他類似的方法已經知道對象是否被創建,並且他們決定何時創建對象或調用構造函數。
這就是爲什麼它不公開。它甚至沒有保護,可以讓派生類調用構造函數。
爲了使單例模式成功和有意義,只有一個公共函數應該在需要時調用構造函數(即getInstance或其他類似的方法)。
0
單例模式的基本原理是允許在應用程序的整個生命週期中只創建一個類的對象。
Singleton類需要私有構造函數,以便這些類的對象不能從類外部實例化。如果Singleton類不具有私有構造函數,則可以從外部創建這些類的對象,因此該類將不再是Singleton類。
相關問題
- 1. @Singleton類我必須使構造函數私有
- 2. 自毀式構造函數== Singleton?
- 3. Singleton設計模式及其子類的默認構造函數
- 4. 構造函數是私有的?
- 5. CallInst構造函數是私有的?
- 6. 定義私有類的構造函數
- 7. 使實體的構造函數私有
- 8. 從C++中的私有模板類繼承構造函數
- 9. 具有靜態構造函數的Singleton模式的優點是什麼?
- 10. 帶有一個參數的私有拷貝構造函數和構造函數
- 11. 在java中,如何使用其父類也有私有構造函數的私有構造函數創建類?
- 12. 私人構造函數或私有函數?
- 13. 如何從多個私人構造函數中反映私人構造函數
- 14. 正確使用私有構造函數
- 15. KScenemer在Lucene有私人構造函數
- 16. CgLib增強私有構造函數
- 17. Java Spring bean與私有構造函數
- 18. 錯誤:構造函數是私有
- 19. 使類構造函數私有
- 20. libstdC++私有basic_streambuf構造函數
- 21. JsonSerializationException類型與私有構造函數
- 22. 私有構造函數和繼承(Java)
- 23. Scala案例類私有構造函數不是私有的
- 24. Dagger 2.0構造函數注入和Singleton
- 25. Spring @Configurable Spring Singleton bean構造函數
- 26. Kotlin - 具有私有構造函數的工廠函數
- 27. 私有構造
- 28. 私有構造
- 29. 私人類的構造函數是否必須是私有的?
- 30. 參數與構造函數中的私有參數不匹配