我是.NET开发人员。我曾多次接受采访,很多次我遇到过一个问题,即“Singleton Design模式的真实用途是什么?”。但我的问题是“为什么我们使用单例,静态关键字就足够了?”因为单例设计模式的目的是防止创建双实例。如果我将我的single_class标记为静态,我也可以实现相同的目标。
答案 0 :(得分:4)
C#使类静态化的能力是单例模式的语言实现。
设计模式是解决常见问题的常用方法。在诸如C ++之类的语言中,类不能直接标记为静态,单例必须由一些智能构造实现 - 一种模式。在C#中,功能是通过静态类构建的。
问题/讨论的下一部分是使用单例的适当位置,单例是一种全局对象/变量。我假设面试官想要讨论哪些适合而不是。
阅读Jon Skeet's answer与链接的问题dave我想添加另一件事:
静态类不能实现接口,因此如果需要一个实现特定接口的单例,它必须是一个真实的对象,并将该类标记为static
将不会。
答案 1 :(得分:1)
C#使用static
关键字来实现单例。但是,单凭该关键字的优点并不能真正实现该模式。
考虑一下:
public class MyFoo
{
public static MyBar;
}
MyBar
是单身吗?它的特定实例是静态的,但类本身不是单例,因为它不会阻止您创建它的更多实例。要实现单例模式,您需要类本身来保证它只能有一个实例。更像是这样:
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
参考here。
通过此实现,应用程序无法创建此类的多个实例。这对于应用单例模式的东西非常有用,例如构建/跟踪其他类的实例的工厂类。 (例如,IoC容器。)