Найти в Дзене
AniNice

Паттерн: Одиночка

Одиночка - это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр и представляет к нему глобальную точку доступа. Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и создать публичный статический метод, который и будет контролировать жизненный цикл объекта-одиночки. Если у вас есть доступ к классу одиночки, значит будет доступ и к этому статическому методу. Из какой точки кода вы бы его не вызвали, он всегда будет отдавать один и тот же объект. Применимость Когда в программе должен быть единственный экземпляр какого-то класса, доступный всем клиентам (например, общий доступ к базе данных из разных частей программы). Одиночка скрывает от клиентов все способы создания нового объекта, кроме специального метода. Этот метод либо создает объект, либо отдает существующий объект, если он уже был создан. Когда вам хочется иметь больше контроля над глобальными переменными. В отличие от глобальных переменных, Одиночка гара
Оглавление

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

Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и создать публичный статический метод, который и будет контролировать жизненный цикл объекта-одиночки.

Если у вас есть доступ к классу одиночки, значит будет доступ и к этому статическому методу. Из какой точки кода вы бы его не вызвали, он всегда будет отдавать один и тот же объект.

Применимость

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

Одиночка скрывает от клиентов все способы создания нового объекта, кроме специального метода. Этот метод либо создает объект, либо отдает существующий объект, если он уже был создан.

Когда вам хочется иметь больше контроля над глобальными переменными.

В отличие от глобальных переменных, Одиночка гарантирует, что никакой другой код не заменит созданный экземпляр класса, поэтому вы всегда уверены в наличии лишь одного объекта-одиночки.

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

Шаги реализации

  1. Добавьте в класс приватное статическое поле, которе будет содержать одиночный объект.
  2. Объявите статический создающий метод, который будет использоваться для получение одиночки.
  3. Добавьте "ленивую инициализацию" (создание объекта при первом вызове метода) в создающий метод одиночки.
  4. Сделайте конструктор класса приватным.
  5. В клиентском коде замените вызовы конструктора одиночки вызовами его создающего метода.