Singleton Class în Java - Cum funcționează Singleton Class în Java?

Cuprins:

Anonim

Introducere în clasa Singleton în Java

Clasa Singleton restricționează crearea obiectului pentru o clasă la doar unul din mașina virtuală java. De asemenea, ajută la furnizarea unui punct de acces global la obiect. Acest model de proiectare este utilizat în mod obișnuit în cache, Abstract Factory, logging, Prototip etc. Este de asemenea utilizat în clasele de bază Java, cum ar fi java.awt.Desktop, java.lang.Runtime. În java.lang.Runtime, Java oferă o clasă Runtime care semnifică actualul mediu de rulare în care rulează aplicația. Acest lucru ajută la interfațarea aplicației și a mediului de rulare. Ar trebui să existe un singur obiect, deoarece JRE este unic. În java.awt.Desktop, clasa Desktop permite aplicațiilor să lanseze un URI sau un fișier cu browserul implicit al utilizatorului, clientului de poștă etc. Aici, de asemenea, trebuie să existe o singură instanță a clasei.

Cum funcționează Singleton Class în Java

Singleton Class poate fi creat în două moduri.

  1. Setați constructorul ca privat pentru a limita crearea unui obiect.
  2. Creați o metodă statică pentru a obține o instanță a obiectului, astfel încât să puteți gestiona doar crearea obiectului în interiorul clasei.

Acum, să vedem diagrama UML (Unified Modeling Language) a clasei Singleton.

În diagrama UML a clasei, prima partiție reprezintă numele unei clase, a doua partiție reprezintă atributele și a treia partiție reprezintă metodele. De asemenea, + indică atribute sau metode publice și - indică atribute sau metode private. În diagrama noastră UML a clasei Singleton, numele clasei este Singleton și are o metodă principală. Metoda principală, metoda getInstance și sampleMethod sunt singurele metode care sunt publice în diagrama de mai sus. Atributul Constructor și instanță este setat ca privat ca parte a implementării noastre. Această metodă principală publică solicită instanța și getInstance o returnează la metoda principală.

Bazat pe Instantiation, singura diferență între Clasa Java normală și Clasa Singleton este că vom folosi un constructor în Clasa Java în timp ce, în Singleton, vom folosi metoda getInstance ().

Modelul de design Singleton este de două forme.

  • Instantiation Lazy: crearea instanței atunci când este necesar
  • Instantarea timpurie: crearea instanței la timpul de încărcare.

1. Instantarea leneșă

În Lazy Instantiation, o instanță de clasă este creată atunci când este necesară. Este creat în metoda sau blocul sincronizat pentru a evita condițiile de cursă care pot apărea într-un mediu cu mai multe filete.

2. Instantarea timpurie

În Instantarea timpurie, o instanță este creată la momentul încărcării. Chiar dacă aceasta este cea mai simplă abordare, are un dezavantaj că crearea instanței este indiferent dacă este accesată sau nu.

Un exemplu de instantaneu leneș și instantaneu timpuriu este explicat în secțiunea următoare.

Implementarea clasei Singleton în Java

După cum s-a discutat mai sus, Clasa Singleton poate fi creată în Instantarea timpurie sau în Instantarea leneșă.

Instantarea leneșă

Urmează pașii pentru a implementa Instantiation Lazy

1. Setați Constructor ca privat.

De exemplu, creăm o clasă LazyClass. Constructorul va fi așa cum se arată mai jos.

private LazyClass ()
(
)

2. Creați o instanță statică privată pentru clasa creată.

private static LazyClass instance;

3. Creați o metodă statică sincronizată care creează instanța de clasă creată.

public static synchronized LazyClass getInstance()
(
)

4. În metoda getInstance (), mai întâi, verificați dacă vreo instanță este prezentă sau nu. Dacă nu este găsit, creați unul. În rest, returnați instanța.

if(instance == null)
(
instance = new LazyClass ();
)
return instance;

Acum, să ne uităm la ea folosind codul de eșantion.

//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();
)
)

ieşire:

Aici, în loc să creeze o instanță la timpul de încărcare, este creat în interiorul blocului sincronizat. Pentru o mai bună înțelegere, se oferă o metodă de eșantion care este protejată de mai multe creații de obiect.

Instantarea timpurie

Acum să vedem pașii pentru Instantarea timpurie. Este asemănătoare cu instantanarea Lazy, cu excepția faptului că nu folosește nicio metodă sau bloc sincronizat.

1. Setați Constructor ca privat.

De exemplu, creăm o clasă EarlyClass. Constructorul va fi așa cum se arată mai jos.

private EarlyClass () ()
(
)

2. Creați o instanță statică privată pentru clasa creată.

private static EarlyClass ins = new EarlyClass();

3. Creați o metodă statică care creează instanța de clasă creată.

public static EarlyClass getInstance()
(
)

Urmează codul de eșantion pentru Instantarea timpurie.

//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();
)
)

ieşire:

În programul de mai sus, o instanță este creată în timp de încărcare și este returnată folosind metoda getInstance (). În plus, Constructor este setat la fel de privat ca parte a instantării singleton.

Economisirea memoriei este principalul avantaj al folosirii acestui obiect ca obiect este reutilizat și nu este creat din nou.

Concluzie

În acest document, am abordat modul în care funcționează o clasă Singleton cu ajutorul diagramei UML, algoritmului și codului de exemplu. Singleton Class este utilizat atunci când avem nevoie de un singur obiect pentru o clasă și un punct de acces global la acel obiect. Cele două forme precum Instanțarea precoce și Instantarea leneșă pot fi utilizate pe baza cerinței.

Articole recomandate

Acesta este un ghid pentru Singleton Class în Java. Aici vom discuta despre modul în care funcționează clasa Singleton în Java împreună cu implementarea care include instantanee leneșe și instantanee timpurie. Puteți parcurge și alte articole sugerate pentru a afla mai multe -

  1. Ce este modelul de design în Java?
  2. Clasă abstractă în Java
  3. Adnotări Java
  4. BorderLayout în Java
  5. JRE vs JVM | Top 8 diferențe cu (Infografie)
  6. Cum se lucrează Metoda statică în JavaScript?