Asp.net 这是单例模式的真正实现吗?
到目前为止,我读过的关于单例模式的所有教程如下:Asp.net 这是单例模式的真正实现吗?,asp.net,design-patterns,singleton,Asp.net,Design Patterns,Singleton,到目前为止,我读过的关于单例模式的所有教程如下: public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton(){} public static Singleton Instance { get { return in
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;
}
}
}
这是真正的单身汉吗?如果没有,什么是处理这种情况的正确方法?我会使用以下方法:
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:new()
{
private static readonly Lazy instance=new Lazy();
公共静态T实例
{
得到
{
返回instance.Value;
}
}
}
其思想是使用泛型,以便允许指定任何类型作为类型参数
lazy只是实例化对象实际实例的一个改进
请注意,这不会禁止直接创建t的实例…不,它不是单例模式。您正在调用新的Y.X()意味着任何人都可以调用它。这并不特别禁止Y.X()的新实例 但是,如果需要确保在应用程序中只引用一个Y.X实例,那么代码是可以的。然后您可以通过调用Singleton.Instance来获得它
这实际上是工厂模式(一个专门用于创建对象的类),我建议您调用类XFactory或类似的东西,而不是singleton。谢谢,不,我不直接使用Y.X。但我需要确保每次实例化类“SingleTon”时,其实例属性都引用第一个创建的Y.X对象。不是新的。