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

193

Паттерн проектирования Одиночка (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.

Читать далее...
Orange Pi / Raspberry Pi - установка и настройка Django в Linux Armbian
Orange Pi / Raspberry Pi - установка и настройка Django в Linux Armbian

Описание процесса установки и настройки python фреймворка django на одноплатных мини компьютерах orange pi / raspberry pi в операционной системе Linux Armbian.

Читать далее...
Резервное копирование каталога в Ubuntu/Debian по расписанию
Резервное копирование каталога в Ubuntu/Debian по расписанию

Краткая инструкция организации простого резервного копирования директории с файлами в Linux (Ubuntu/Debian) по расписанию

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

Это интересно

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

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

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

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

Читать далее...
Yii2 установка и настройка advanced приложения
Yii2 установка и настройка advanced приложения

Описание процесса установки и настройки advanced приложения php фреймворка Yii2 с использование composer, рассмотрены возможные "подводные камни", возникающие при установке и настройке Yii2 advanced

Читать далее...
Подключение инфракрасного (ИК) пульта к Arduino
Подключение инфракрасного (ИК) пульта к Arduino

Описание процесса подключения инфракрасного дистанционного пульта управления к arduino, пример arduino скетча для работы с инфракрасным дистанционным пультом

Читать далее...
Yii2 методы beforeSave и afterSave
Yii2 методы beforeSave и afterSave

В статье рассмотрены полезные функции фреймворка Yii2 beforeSave и afterSave, приведен практический пример использования функций beforeSave и afterSave

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