当我遇到类似的Java问题时,出现了这个问题。 What is an efficient way to implement a singleton pattern in Java?
我们可以在C#中实现类似的东西吗?
答案 0 :(得分:4)
您必须已经通过Jon Skeet检查了Implementing the Singleton Pattern in C#
然而,所有这些实现共享四个共同特征:
- 单个构造函数,它是私有且无参数的。这可以防止其他> >实例化它的类(这将违反模式)。请注意,它还可以防止子类化 - 如果一个单例可以被子类化一次,它可以被子类化> gt;两次,并且如果每个子类都可以创建一个实例,则违反该模式。如果您需要基本类型的单个实例,则可以使用工厂模式,但直到运行时才能知道确切的类型。
- 课程是密封的。严格来说,由于上述原因,这是不必要的,但可能有助于JIT更好地优化事物。
- 一个静态变量,用于保存对单个已创建实例的引用(如果有)。
- 公共静态意味着获取对单个已创建实例的引用,必要时创建一个实例。
public class Singleton
{
static readonly Singleton _instance = new Singleton();
static Singleton() { }
private Singleton() { }
public static Singleton Instance
{
get { return _instance; }
}
}
答案 1 :(得分:1)
实施一个
的常用方法public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton() {}
static Singleton() {}
public static Singleton Instance { get { return instance; } }
}
答案 2 :(得分:1)
public class Singleton
{
private static Singleton instance = null;
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton ();
}
return instance;
}
}
答案 3 :(得分:0)