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

👁 3994

Паттерн проектирования Одиночка (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.
Новые статьи
Установка Webmin для Armbian (Orange Pi / Raspberry Pi)
Установка Webmin для Armbian (Orange Pi / Raspberry Pi)

Установка webmin для операционной системы Armbian (Orange Pi / Raspberry Pi). Install webmin for armbian.

Читать далее...
Текстовое поле с выпадающими подсказками при вводе текста C# WPF XAML
Текстовое поле с выпадающими подсказками при вводе текста C# WPF XAML

Простая реализация текстового поля с выпадающими подсказками (аналогично поиску у Яндекс и Google) при вводе текста на языке C# WPF. Реализация пользовательского элемента управления в C#/

Читать далее...
Yii2 advanced доступ из backend к frontend кэшу
Yii2 advanced доступ из backend к frontend кэшу

В заметке описан способ доступа к фронтэнд (frontend) кэшу (cache) advanced приложения из бэкэнда (backend) для php фреймворка Yii2.

Читать далее...