Java Singleton (с примером)

В этом руководстве мы узнаем о шаблоне проектирования singleton и о том, как применить его в Java с помощью примеров.

Синглтон - это скорее шаблон проектирования, чем особенность Java. Это гарантирует, что будет создан только один экземпляр класса.

Шаблон проектирования похож на нашу библиотеку кода, которая включает в себя различные методы кодирования, используемые программистами по всему миру.

Java Singleton

Вот как мы можем использовать синглтоны в Java.

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

Вот пример.

 class SingletonExample ( // private field that refers to the object private static SingletonExample singleObject; private SingletonExample() ( // constructor of the SingletonExample class ) public static SingletonExample getInstance() ( // write code that allows us to create only one object // access the object as per our need ) ) 

В приведенном выше примере

  • private static SingletonExample singleObject - ссылка на объект класса.
  • private SingletonExample() - частный конструктор, ограничивающий создание объектов вне класса.
  • public static SingletonExample getInstance()- этот метод возвращает ссылку на единственный объект класса. Поскольку метод статический, к нему можно получить доступ, используя имя класса.

Использование класса Singleton

Синглтоны можно использовать при работе с базами данных. Их можно использовать для создания пула соединений для доступа к базе данных при повторном использовании одного и того же соединения для всех клиентов. Например,

 class Database ( private static Database dbObject; private Database() ( ) public static Database getInstance() ( // create object if it's not already created if(dbObject == null) ( dbObject = new Database(); ) // returns the singleton object return dbObject; ) public void getConnection() ( System.out.println("You are now connected to the database."); ) ) class Main ( public static void main(String() args) ( Database db1; // refers to the only object of Database db1= Database.getInstance(); db1.getConnection(); ) ) 

Когда мы запустим программу, вывод будет:

 Теперь вы подключены к базе данных. 

В нашем примере выше

  • Мы создали одноэлементный класс Database.
  • DbObject - это поле типа класса. Это будет относиться к объекту класса Database.
  • Частный конструктор Database()предотвращает создание объекта вне класса.
  • Метод статического типа класса getInstance()возвращает экземпляр класса во внешний мир.
  • В классе Main у нас есть переменная типа класса db1. Мы вызываем getInstance()использование db1 для получения единственного объекта базы данных.
  • getConnection()Доступ к методу можно получить только с помощью объекта базы данных.
  • Поскольку база данных может иметь только один объект, все клиенты могут получить доступ к базе данных через одно соединение.

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

Мы рекомендуем вам полностью избегать использования синглтонов, если вы не уверены, использовать его или нет. Узнать больше: Что такого плохого в синглтоне?

Интересные статьи...