Найти в Дзене
using Dev

Singleton C#

Оглавление

Класс, реализующий данный шаблон:

  • гарантирует, что можно создать только один его экземпляр;
  • и предоставляет точку доступа для получения этого экземпляра.

Одиночка используется в случае, если в системе необходим объект только в единственном экземпляре. Например ведение отладочной информации, реализация сессий, кэш приложения, менеджер печати, доступ к аппаратному обеспечению и т. д. Нередко он используется вместе с другими шаблонами (Абстрактной фабрикой, Строителем и Прототипом) для обеспечения уникальности их экземпляра.

При проектировании приложения стоит учесть и минимизировать возможные негативные последствия использования Одиночки. Они являются проявлением его "глобализации". В частности:

  1. Многие части приложения становятся зависимы от него и, косвенно, друг от друга. Это усложняет внесение изменений в дальнейшем. Облегчить ситуацию можно используя Внедрение зависимостей.
  2. Приложение становится сложнее тестировать, т.к. данные, полученные от Одиночки, могут быть созданы в другом модуле.

Схожие шаблоны и их отличия

Альтернативой Одиночке является статический класс, который имеет следующие ограничения:

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

Как видно из описания, Одиночка является более универсальным решением. Но если необходимо просто собрать ряд методов "под одной крышей", то для такой задачи лучше подходит статический класс.

Реализация шаблона в общем виде

  • объявляем только закрытый конструктор, чтобы запретить создание экземпляров извне;
  • в закрытом поле размещаем единственный экземпляр класса;
  • предоставляем доступ к нему через свойство, открытое только для чтения;
  • клиентский код использует это свойство для получения общего экземпляра класса.

Пример

Создадим класс подключения к бд DatabaseHelper

-2

Проверим работоспособность

-3
-4

Как видим, конструктор вызвался только 1 раз.

Наука
7 млн интересуются