2012-06-06 104 views
1

所有教程我讀過到目前爲止關於Singleton模式,如下爲:這是Singleton Pattern的真正實現嗎?

public sealed class Singleton 
{ 
     private static readonly Singleton instance = new Singleton(); 

     private Singleton(){} 

     public static Singleton Instance 
     { 
     get 
     { 
      return instance; 
     } 
     } 
} 

,但我已經有一個班,我只是需要有應用程序生命週期中它的一個實例的裝配。我不知道如何使用上面提到的模式。

例如,假設在dll中有一個名爲Y的類X.是以下代碼正確:

public sealed class Singleton 
{ 
     private static readonly Y.X instance = new Y.X(); 

     private Singleton(){} 

     public static Y.X Instance 
     { 
     get 
     { 
      return instance; 
     } 
     } 
} 

這是一個真正的單身人士嗎?如果不是,處理這種情況的正確方法是什麼?

回答

1

沒有它不是單例模式。你調用新的Y.X()意味着任何人都可以調用它。這並不特別禁止Y.X的新實例()

但是,如果您需要確保在應用程序中只引用Y.X的一個實例,則代碼是可以的。然後你可以通過調用Singleton.Instance來獲得它。

這實際上是Factory模式(專門用於創建對象的類),我建議您調用類XFactory或類似的東西,而不是單例。

1

我會使用類似:

public static class Singleton<T> 
    where T : new() 
{ 
    private static readonly Lazy<T> instance = new Lazy<T>(); 

    public static T Instance 
    { 
     get 
     { 
      return instance.Value; 
     } 
    } 
} 

的想法是使用泛型,以便允許指定任何類型的類型參數。

懶惰只是實例化對象的實際實例的改進。

請注意,這不會禁止創建牛逼直接的例子...

+0

謝謝,不,我不直接使用Y.X。但我需要確保每次我實例化類「SingleTon」時,其實例屬性引用第一個創建的Y.X對象。不是一個新的。 –