Въведение в класа на Singleton в Java

Класът Singleton ограничава създаването на обект за клас само до един във виртуалната машина java. Освен това помага за осигуряване на глобална точка за достъп до обекта. Този дизайнерски модел обикновено се използва в кеширането, абстрактната фабрика, регистрирането, прототипа и др. Използва се и в основни класове java като java.awt.Desktop, java.lang.Runtime. В java.lang.Runtime Java предоставя клас Runtime, който означава текущата среда за изпълнение, където се изпълнява приложението. Това помага при взаимодействието на приложението и средата на изпълнение. Трябва да има един обект, тъй като JRE е уникален. В java.awt.Desktop, клас Desktop позволява на приложенията да стартират URI или файл с браузър по подразбиране на потребителя, пощенски клиент и т.н. Тук също трябва да има само един екземпляр от класа.

Как работи Singleton Class в Java

Singleton Class може да бъде създаден по два начина.

  1. Задайте конструктора като частен, за да ограничите създаването на обект.
  2. Създайте статичен метод, за да получите екземпляр на обекта, така че да можете да се справите със създаването на обект само в класа.

Сега, нека да видим диаграмата UML за клас (Unified Modeling Language) на класа Singleton.

В класа UML диаграмата първият дял представлява името на клас, вторият дял представлява атрибутите, а третият дял представлява методите. Също така, + показва публични атрибути или методи и - показва частни атрибути или методи. В нашата UML диаграма на Singleton Class името на класа е Singleton и има основен метод. Основният метод, getInstance методът и sampleMethod са единствените методи, които са публично достояние в горната диаграма. Атрибутът конструктор и екземпляр е зададен като частен като част от нашата реализация. Този обществен основен метод изисква инстанцията и getInstance го връща към основния метод.

На базата на Instantiation, единствената разлика между нормалния Java Class и Singleton Class е, че ще използваме конструктор в Java Class, докато в Singleton ще използваме метода getInstance ().

Моделът на Singleton дизайн е от две форми.

  • Мързелива моменталност: Създаване на инстанции, когато се изисква
  • Ранна мигновеност: Създаване на инстанции по време на зареждане.

1. Мързелива моменталност

В Lazy Instantiation се създава екземпляр от клас, когато се изисква. Той е създаден по метода или блок синхронизиран, за да се избегнат условията на състезанието, които могат да възникнат в многонишкова среда.

2. Ранна мигновеност

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

Пример за Lazy Instantiation и Early Instantiation е обяснен в следващия раздел.

Внедряване на Singleton клас в Java

Както беше обсъдено по-горе, Singleton Class може да бъде създаден в ранна инстанция или мързелива инстанция.

Мързелива моменталност

Следват стъпките за прилагане на мързеливото моментално действие

1. Задайте Constructor като частен.

Например, създаваме клас 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();
)
)

изход:

Тук, вместо да създава екземпляр по време на зареждане, той се създава вътре в синхронизирания блок. За по-добро разбиране е даден и примерен метод, който е защитен от повече от едно създаване на обекти.

Ранна инстанция

Сега нека да видим стъпките за ранна инстанция. Той е подобен на Lazy instantiation, само че не използва синхронизиран метод или блок.

1. Задайте Constructor като частен.

Например, ние създаваме клас 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 Class с помощта на Class UML диаграма, алгоритъм и код на пример. Класът Singleton се използва, когато имаме нужда само от един обект за клас и глобална точка за достъп до този обект. Двете форми като ранна инстанция и мързелива инстанция могат да се използват въз основа на изискването.

Препоръчителни статии

Това е ръководство за Singleton Class в Java. Тук обсъждаме как сингъл класът работи в Java, заедно с внедряването, което включва мързелива инстанция и ранна инстанция. Можете да разгледате и другите ни предложени статии, за да научите повече -

  1. Какво представлява дизайнерският модел в Java?
  2. Абстрактен клас по Java
  3. Анотации на Java
  4. BorderLayout в Java
  5. JRE срещу JVM | Топ 8 разлики с (Инфографика)
  6. Как да работя със статичен метод в JavaScript?