Введение в синглтон-класс в Java
Класс Singleton ограничивает создание объекта для класса только одним в виртуальной машине Java. Это также помогает в предоставлении глобальной точки доступа к объекту. Этот шаблон проектирования обычно используется в кешировании, абстрактной фабрике, ведении журнала, прототипе и т. Д. Он также используется в основных классах Java, таких как java.awt.Desktop, java.lang.Runtime. В java.lang.Runtime Java предоставляет класс Runtime, который обозначает текущую среду выполнения, в которой выполняется приложение. Это помогает взаимодействовать с приложением и средой выполнения. Должен быть один объект, так как JRE уникален. В java.awt.Desktop класс Desktop позволяет приложениям запускать URI или файл с браузером пользователя по умолчанию, почтовым клиентом и т. Д. Здесь также должен быть только один экземпляр класса.
Как класс Singleton работает в Java
Синглтон-класс может быть создан двумя способами.
- Установите конструктор как частный, чтобы ограничить создание объекта.
- Создайте статический метод для получения экземпляра объекта, чтобы вы могли обрабатывать создание объекта только внутри класса.
Теперь давайте посмотрим на диаграмму UML (Unified Modeling Language) класса Singleton Class.
На диаграмме UML класса первый раздел представляет имя класса, второй раздел представляет атрибуты, а третий раздел представляет методы. Кроме того, + указывает открытые атрибуты или методы и - указывает частные атрибуты или методы. В нашей UML-диаграмме класса Singleton имя класса - Singleton, и у него есть метод main. Основной метод, метод getInstance и sampleMethod - единственные методы, которые являются общедоступными на приведенной выше диаграмме. Атрибут конструктора и экземпляра устанавливается как частный как часть нашей реализации. Этот публичный метод Main запрашивает экземпляр, а getInstance возвращает его методу main.
Основываясь на Instantiation, единственное различие между обычным классом Java и классом Singleton заключается в том, что мы будем использовать конструктор в классе Java, тогда как в Singleton мы будем использовать метод getInstance ().
Узор синглтон имеет две формы.
- Ленивая инстанция : создание экземпляра при необходимости
- Раннее создание экземпляра : создание экземпляра во время загрузки.
1. Ленивый экземпляр
В Lazy Instantiation экземпляр класса создается, когда это требуется. Он создается в синхронизированном методе или блоке, чтобы избежать условий гонки, которые могут возникнуть в многопоточной среде.
2. Раннее изучение
В раннем экземпляре экземпляр создается во время загрузки. Несмотря на то, что это самый простой подход, он имеет недостаток, заключающийся в том, что создание экземпляра не зависит от того, к нему осуществляется доступ или нет.
Пример «Ленивых» и «Ранних» описан в следующем разделе.
Реализация класса Singleton в Java
Как уже говорилось выше, класс Singleton может быть создан в раннем или ленивом экземпляре.
Ленивый экземпляр
Ниже приведены шаги для реализации Ленивый Instantiation
1. Установите Конструктор как частный.
Например, мы создаем класс LazyClass. Конструктор будет таким, как показано ниже.
private LazyClass ()
(
)
2. Создайте личный статический экземпляр для созданного класса.
private static LazyClass instance;
3. Создайте статический синхронизированный метод, который создает экземпляр класса.
public static synchronized LazyClass getInstance()
(
)
4. В методе getInstance () сначала проверьте, присутствует ли какой-либо экземпляр. Если не найдено, создайте его. Остальное верните экземпляр.
if(instance == null)
(
instance = new LazyClass ();
)
return instance;
Теперь давайте посмотрим на это, используя пример кода.
//Java Program for Lazy Instantiation
public class LazyClass (
private static LazyClass instance;
//set the constructor as private
private LazyClass () ()
//Checks whether an instance is already in the getInstance method
public static synchronized LazyClass getInstance() (
//if instance is not present already, create a new one
if(instance == null) (
instance = new LazyClass ();
)
// if an instance is present, then return it
return instance;
)
//Sample method that is protected from more than one object creation
public void sampleMethod( ) (
System.out.println("sampleMethod for lazy singleton");
)
public static void main(String() args) (
LazyClass temp=LazyClass.getInstance();
temp.sampleMethod();
)
)
Выход:
Здесь вместо создания экземпляра во время загрузки он создается внутри синхронизированного блока. Для лучшего понимания также приведен пример метода, который защищен от создания нескольких объектов.
Ранняя инстанция
Теперь давайте посмотрим шаги для ранней инстанции. Это похоже на Ленивый экземпляр, за исключением того, что он не использует какой-либо синхронизированный метод или блок.
1. Установите Конструктор как частный.
Например, мы создаем класс EarlyClass. Конструктор будет таким, как показано ниже.
private EarlyClass () ()
(
)
2. Создайте личный статический экземпляр для созданного класса.
private static EarlyClass ins = new EarlyClass();
3. Создайте статический метод, который создает экземпляр класса.
public static EarlyClass getInstance()
(
)
Ниже приведен пример кода для раннего создания экземпляра.
//Java Program for Early Instantiation
public class EarlyClass (
//Create an instance of the class at load time
private static EarlyClass ins = new EarlyClass();
//set the constructor as private
private EarlyClass () ()
//A static method to get the instance
public static EarlyClass getInstance() (
return ins ;
)
//A sample method that is protected from more than one object creation
public void sampleMethod() (
System. out .println("sampleMethod for Early singleton");
)
//Main method
public static void main(String() args) (
EarlyClass tmp = getInstance ();
tmp.sampleMethod();
)
)
Выход:
В приведенной выше программе экземпляр создается во время загрузки и возвращается с использованием метода getInstance (). Кроме того, Constructor устанавливается как частный как часть единственного экземпляра.
Экономия памяти - главное преимущество использования этого объекта, поскольку объект используется повторно, а не создается снова и снова.
Вывод
В этом документе мы рассмотрели, как работает класс Singleton с помощью диаграммы, алгоритма и примера кода класса UML. Класс Singleton используется, когда нам нужен только один объект для класса и глобальная точка доступа к этому объекту. Две формы, такие как Ранняя инстанциация и Ленивая инстанциация, могут использоваться в зависимости от требований.
Рекомендуемые статьи
Это руководство по классу Singleton в Java. Здесь мы обсуждаем, как синглтон-класс работает в Java наряду с реализацией, которая включает в себя отложенную реализацию и раннюю реализацию. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -
- Что такое шаблон проектирования в Java?
- Абстрактный класс на Java
- Java аннотации
- BorderLayout в Java
- JRE против JVM | Топ 8 отличий с (Инфографика)
- Как работает статический метод в JavaScript?