Uvod v razred Singleton na Javi

Razred Singleton omeji ustvarjanje predmeta za razred le na enega v java virtualnem stroju. Pomaga tudi pri zagotavljanju globalne dostopne točke do predmeta. Ta vzorec oblikovanja se običajno uporablja v predpomnjenju, abstraktni tovarni, sečnji, prototipu itd. V java.lang.Runtime Java zagotavlja razred Runtime, ki označuje trenutno Runtime Environment, kjer se aplikacija izvaja. To pomaga pri povezovanju aplikacije in izvajalnega okolja. Obstajati bi moral en predmet, saj je JRE edinstven. V java.awt.Desktop razred Desktop aplikacijam omogoča, da zaženejo URI ali datoteko s privzetim brskalnikom uporabnika, poštnega odjemalca itd. Tudi tukaj mora biti le en primerek razreda.

Kako razred Singleton deluje na Javi

Razred Singleton je mogoče ustvariti na dva načina.

  1. Konstruktor nastavite kot zasebnega, da omejite ustvarjanje predmeta.
  2. Ustvarite statično metodo, da dobite primerek predmeta, tako da lahko ravnate z ustvarjanjem predmeta samo znotraj razreda.

Zdaj si oglejmo diagram razreda UML (Unified Modeling Language) razreda Singleton.

V diagramu razreda UML prva particija predstavlja ime razreda, druga particija predstavlja atribute in tretja particija predstavlja metode. Tudi + označuje javne atribute ali metode in - označuje zasebne atribute ali metode. V našem diagramu razreda UM Singleton je ime razreda Singleton in ima glavno metodo. Glavna metoda, metoda getInstance in sampleMethod sta edini metod, ki sta na zgornjem diagramu javna. Atribut konstruktorja in primerka je kot del naše izvedbe nastavljen kot zaseben. Ta javna glavna metoda zahteva primerek in getInstance ga vrne v glavni način.

Glede na Instantiation je edina razlika med običajnim Java Classom in Singleton Classom ta, da bomo v Java Classu uporabili konstruktor, medtem ko bomo v Singletonu uporabili metodo getInstance ().

Singleton oblikovalski vzorec je dveh oblik.

  • Lazy Instantiation: ustvarjanje primerkov, kadar je to potrebno
  • Zgodnja Instantiation: ustvarjanje primerkov v času nalaganja.

1. Leni trenutek

V Lazy Instantiation se ustvari primerek razreda, ko je to potrebno. Ustvarjen je v sinhronizirani metodi ali bloku, da bi se izognili dirkaškim razmeram, ki se lahko pojavijo v več niti.

2. Zgodnja trenutnost

V Early Instantiation se ob času nalaganja ustvari primerek. Čeprav je to najpreprostejši pristop, ima slabost to, da je ustvarjanje primerkov ne glede na to, ali je do njega dostopen ali ne.

Primer lene Instanttiation in Early Instantiation je razložen v naslednjem razdelku.

Izvajanje Singleton razreda v Javi

Kot je razloženo zgoraj, je Singleton Class mogoče ustvariti v zgodnji Instantiation ali Lazy Instantiation.

Lena norost

Sledijo koraki za uveljavitev Lazy Instantiation

1. Konstruktor nastavite kot zasebnega.

Na primer, ustvarjamo razred LazyClass. Konstruktor bo, kot je prikazano spodaj.

private LazyClass ()
(
)

2. Ustvarite zasebni statični primerek za ustvarjeni razred.

private static LazyClass instance;

3. Ustvarite statično sinhronizirano metodo, ki bo ustvarila primerek razreda.

public static synchronized LazyClass getInstance()
(
)

4. Pri metodi getInstance () najprej preverite, ali je kateri koli primerek prisoten ali ne. Če ga ne najdete, ga ustvarite. Ostalo vrnite primerek.

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

Zdaj pa si oglejmo to z vzorčno kodo.

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

Izhod:

Tu se namesto ustvarjanja primerka v času nalaganja ustvari znotraj sinhroniziranega bloka. Za boljše razumevanje je podana tudi vzorčna metoda, ki je zaščitena pred več kot enim ustvarjanjem predmetov.

Zgodnja trenutnost

Zdaj pa si oglejmo korake za zgodnjo zaustavitev. Podobno je z Lazy instantiation, le da ne uporablja nobene sinhronizirane metode ali bloka.

1. Konstruktor nastavite kot zasebnega.

Na primer, ustvarjamo razred EarlyClass. Konstruktor bo, kot je prikazano spodaj.

private EarlyClass () ()
(
)

2. Ustvarite zasebni statični primerek za ustvarjeni razred.

private static EarlyClass ins = new EarlyClass();

3. Ustvarite statično metodo, ki bo ustvarila primerek razreda.

public static EarlyClass getInstance()
(
)

Sledi vzorčna koda za zgodnjo sprostitev.

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

Izhod:

V zgornjem programu se ustvari primerek v času nalaganja in ga vrne z metodo getInstance (). Poleg tega je Constructor nastavljen kot zaseben kot del enotne instancije.

Shranjevanje pomnilnika je glavna prednost uporabe tega predmeta, saj se predmet ponovno uporablja in ne ustvarja znova in znova.

Zaključek

V tem dokumentu smo opisali, kako razred Singleton deluje s pomočjo UML diagrama, algoritma in vzorčne kode razreda. Razred Singleton se uporablja, kadar potrebujemo le en predmet za razred in globalno dostopno točko do tega predmeta. Na podlagi zahteve se lahko uporabljata dve obliki, kot sta zgodnja instancija in leni trenutek.

Priporočeni članki

To je vodnik za razred Singleton na Javi. Tukaj razpravljamo o tem, kako singleton razred deluje v javi skupaj z izvajanjem, ki vključuje leno instantiation in zgodnjo instanciation. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

  1. Kaj je oblikovalski vzorec na Javi?
  2. Izvleček razreda Java
  3. Napomene Java
  4. BorderLayout na Javi
  5. JRE proti JVM | Najboljših 8 razlik z (Infographics)
  6. Kako deluje statična metoda v JavaScript?