В этом руководстве мы узнаем о шаблоне проектирования 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()
Доступ к методу можно получить только с помощью объекта базы данных.- Поскольку база данных может иметь только один объект, все клиенты могут получить доступ к базе данных через одно соединение.
Важно отметить, что существует всего несколько сценариев (например, ведение журнала), в которых синглтоны имеют смысл. Даже соединение с базой данных обычно не должно быть одноэлементным.
Мы рекомендуем вам полностью избегать использования синглтонов, если вы не уверены, использовать его или нет. Узнать больше: Что такого плохого в синглтоне?