我读到的关于Singleton模式的所有教程如下:
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton(){}
public static Singleton Instance
{
get
{
return instance;
}
}
}
但是我已经在程序集中有一个类,我需要在应用程序生命周期中只有一个它的实例。我不知道如何使用上面提到的模式。
例如,假设在名为Y的dll中有一个类X.下面的代码是正确的: public sealed class Singleton
{
private static readonly Y.X instance = new Y.X();
private Singleton(){}
public static Y.X Instance
{
get
{
return instance;
}
}
}
这是一个真正的单身人士吗?如果没有,处理这种情况的正确方法是什么?
答案 0 :(得分: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;
}
}
}
我们的想法是使用Generics以允许将任何类型指定为类型参数。
懒惰只是对实例化对象的实际实例的一种改进。
请注意,这不会禁止直接创建T的实例......
答案 1 :(得分:1)
不是它不是单身人士模式。您正在调用新的Y.X()这意味着任何人都可以调用它。这并不特别禁止Y.X()
的新实例但是,如果您需要确保在应用程序中仅引用Y.X的一个实例,则代码是可以的。然后你可以通过调用Singleton.Instance来获得它。
这实际上是Factory模式(一个专门用于创建对象的类),我建议你调用类XFactory或类似的东西,而不是单例。