Зачем использовать шаблон Singleton? - PullRequest
5 голосов
/ 30 июля 2011

Я разработчик .NET.Я несколько раз брал интервью и много раз сталкивался с вопросом: «Каково в действительности использование шаблона Singleton Design?».Но мой вопрос: «Почему мы используем синглтон, достаточно статического ключевого слова?»потому что целью шаблона проектирования Singleton является предотвращение создания двойных экземпляров.Если я отмечу свой single_class как статический, я также могу достичь той же цели или нет.

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

Способность C # делать классы статичными является языковой реализацией шаблона singleton.

Шаблоны проектирования - это общие способы решения общих проблем. В языке, таком как C ++, где классы не могут быть помечены как статические напрямую, синглтон должен быть реализован с помощью некоторой умной конструкции - шаблона. В C # эта функциональность встроена в статические классы.

В следующей части вопроса / обсуждения уместно использовать синглтоны, которые являются своего рода глобальным объектом / переменной. Я предполагаю, что интервьюеры хотят обсудить, где это уместно, а что нет.

Редактировать

Чтение Ответ Джона Скита на вопрос, с которым Дейв связан, я хотел бы добавить еще одну вещь:

Статический класс не может реализовывать интерфейсы, поэтому, если необходимо иметь синглтон, который реализует определенный интерфейс, он должен быть реальным объектом, и маркировка класса как static не годится.

1 голос
/ 30 июля 2011

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;
      }
   }
}

Ссылка здесь .

В этой реализации приложение не может создавать несколько экземпляров этого класса. Это очень полезно для вещей, к которым применяется шаблон синглтона, таких как фабричный класс, который создает / отслеживает экземпляры других классов. (Контейнер IoC, например.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...