2012-06-06 66 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对象。不是一个新的。 –