为什么要使用Singleton Pattern?

时间:2011-07-30 13:16:52

标签: design-patterns static singleton

我是.NET开发人员。我曾多次接受采访,很多次我遇到过一个问题,即“Singleton Design模式的真实用途是什么?”。但我的问题是“为什么我们使用单例,静态关键字就足够了?”因为单例设计模式的目的是防止创建双实例。如果我将我的single_class标记为静态,我也可以实现相同的目标。

2 个答案:

答案 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容器。)