1

到目前为止,我读过的所有关于单例模式的教程如下:

 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; 
         }
      }
 }

这是一个真正的单身人士吗?如果不是,那么处理这种情况的正确方法是什么?

4

2 回答 2

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;
        }
    }
}

这个想法是使用泛型以允许将任何类型指定为类型参数。

惰性只是实例化对象的实际实例的一种改进。

请注意,这不会禁止直接创建 T 实例...

于 2012-06-06T15:11:11.180 回答
1

不,它不是单例模式。您调用 new YX() 的事实意味着任何人都可以调用它。这并没有明确禁止 YX() 的新实例

但是,如果您需要确保在应用程序中仅引用一个 YX 实例,则该代码是可以的。然后你可以通过调用 Singleton.Instance 来获取它。

这实际上是工厂模式(一个专门用于创建对象的类),我建议您调用类 XFactory 或类似的东西,而不是单例。

于 2012-06-06T15:11:16.130 回答