C# паттерн проектирования Одиночка (Singleton)

Паттерн проектирования Одиночка (Singleton), является достаточно простым шаблоном проектирования. Суть паттерна заключается в том, что для определенного класса можно создать только один экземпляр. Рассмотрим простой пример реализации паттерна Одиночка (синглтон, singleton) на примере языка программирования C#:

public class Singleton
{
  private static Singleton instance = null;
  private Singleton() {}
  
  public static Singleton Instance
  {
    get {
      if(instance == null) {
        instance = new Singleton();
      }
      return instance;
    }
  }
}

Таким образом, мы написали класс, у которого будет только один экземпляр, так как конструктор класса объявлен с модификатором private, и из-вне класса создать его экземпляр невозможно. Чтобы убедится, что экземпляр класса действительно один, можно написать следующий код:

Singleton s1 = Singleton.Instance;
Singleton s2 = Singleton.Instance;
Console.WriteLine(s1 == s2) // Результат - True

Иля воспользоваться тестами:

Assert.AreSame(Singleton.Instance, Singleton.Instance);

Функция AreSame проверяет, что две указанные объектные переменные ссылаются на один объект. Утверждение не выполняется, если они ссылаются на разные объекты.

Паттерн Singleton целесообразно использовать, когда на протяжении выполнения программы необходим только один объект класса, например, объект подключения к базе данных.

К неостаткам паттерна Singleton относят:

  • неопределенность уничтожения -  не  существует  приемлемого  способа уничтожить  или  «списать»  Одиночку;
  • одиночка не  наследуется;
  • каждое  обращение  к свойству Instance приводит к выполнению  предложения if.