2013-11-04 47 views

回答

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(); 

但模式本身是爲了避免多個副本。

http://csharpindepth.com/articles/general/singleton.aspx

0

任何成員函數(或方法)是由私人使得類的唯一成員函數具有在它的訪問或控制。所以,構造函數是私有的,只有成員函數可以調用構造函數,因此可以創建對象。

因爲getInstance或其他類似的方法已經知道對象是否被創建,並且他們決定何時創建對象或調用構造函數。

這就是爲什麼它不公開。它甚至沒有保護,可以讓派生類調用構造函數。

爲了使單例模式成功和有意義,只有一個公共函數應該在需要時調用構造函數(即getInstance或其他類似的方法)。

0

單例模式的基本原理是允許在應用程序的整個生命週期中只創建一個類的對象。

Singleton類需要私有構造函數,以便這些類的對象不能從類外部實例化。如果Singleton類不具有私有構造函數,則可以從外部創建這些類的對象,因此該類將不再是Singleton類。