Úvod do triedy Singleton v Jave

Trieda Singleton obmedzuje vytváranie objektov pre triedu iba na jednu vo virtuálnom počítači java. Pomáha tiež pri poskytovaní globálneho prístupového bodu k objektu. Tento návrhový vzor sa bežne používa v pamäti cache, abstraktnej továrni, protokolovaní, prototypoch atď. Používa sa tiež v základných triedach javy, ako sú java.awt.Desktop, java.lang.Runtime. V java.lang.Runtime poskytuje Java triedu Runtime, ktorá označuje aktuálne prostredie Runtime Environment, v ktorom je aplikácia spustená. Pomáha to pri prepojení aplikačného a runtime prostredia. Mal by existovať jeden objekt, pretože JRE je jedinečný. V java.awt.Desktop, trieda Desktop umožňuje aplikáciám spustiť URI alebo súbor s predvoleným prehliadačom používateľa, poštového klienta atď. Tiež tu musí byť iba jedna inštancia triedy.

Ako Singleton Class funguje v Jave

Singleton Class je možné vytvoriť dvoma spôsobmi.

  1. Nastavte konštruktor ako súkromný, aby ste obmedzili vytváranie objektu.
  2. Vytvorte statickú metódu na získanie inštancie objektu, aby ste mohli zvládnuť vytvorenie objektu iba v rámci triedy.

Teraz sa pozrime na diagram triedy UML (Unified Modeling Language) triedy Singleton.

V diagrame triedy UML prvý oddiel predstavuje názov triedy, druhý oddiel predstavuje atribúty a tretí oddiel predstavuje metódy. + Tiež označuje verejné atribúty alebo metódy a - označuje súkromné ​​atribúty alebo metódy. V našom diagrame triedy UML Singleton je názov triedy Singleton a má hlavnú metódu. Hlavná metóda, metóda getInstance a sampleMethod sú jediné metódy, ktoré sú verejné vo vyššie uvedenom diagrame. Atribút Constructor a instance je v rámci našej implementácie nastavený ako súkromný. Táto verejná hlavná metóda žiada inštanciu a getInstance ju vráti hlavnej metóde.

Na základe Instantiation je jediným rozdielom medzi normálnou triedou Java a triedou Singleton to, že budeme používať konštruktor v triede Java, zatiaľ čo v Singleton budeme používať metódu getInstance ().

Vzor dizajnu Singleton má dve formy.

  • Lazy Instantiation: Vytvorenie inštancie v prípade potreby
  • Skoré okamžité: Vytvorenie inštancie v čase načítania.

1. Lazy Instantiation

V Lazy Instantiation sa inštancia triedy vytvorí, keď sa vyžaduje. Vytvorí sa synchronizovanou metódou alebo blokom, aby sa predišlo rasovým podmienkam, ktoré sa môžu vyskytnúť v prostredí s viacerými vláknami.

2. Včasné okamžité vybavenie

V službe Early Instantiation sa inštancia vytvorí v čase načítania. Aj keď je to najjednoduchší prístup, má to nevýhodu, že vytvorenie inštancie je bez ohľadu na to, či je prístupné alebo nie.

V nasledujúcom oddiele je uvedený príklad okamžitého a skorého okamžitého vykonávania.

Implementácia Singleton Class v Jave

Ako už bolo uvedené vyššie, triedu Singleton je možné vytvoriť v ranom alebo okamžitom okamihu.

Lazy Instantiation

Nasledujú kroky na implementáciu Lazy Instantiation

1. Nastavte Constructor ako súkromný.

Napríklad vytvárame triedu LazyClass. Konštruktor bude taký, ako je znázornené nižšie.

private LazyClass ()
(
)

2. Vytvorte súkromnú statickú inštanciu pre vytvorenú triedu.

private static LazyClass instance;

3. Vytvorte statickú synchronizovanú metódu, ktorá vytvorí inštanciu triedy.

public static synchronized LazyClass getInstance()
(
)

4. V metóde getInstance () najprv skontrolujte, či je nejaká inštancia prítomná alebo nie. Ak sa nenájde, vytvorte ho. Inak vrátite inštanciu.

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

Pozrime sa na to pomocou vzorového kódu.

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

Výkon:

Tu sa namiesto vytvárania inštancie v čase načítania vytvára vo vnútri synchronizovaného bloku. Pre lepšie pochopenie je tiež uvedená vzorová metóda, ktorá je chránená pred viac ako jedným vytvorením objektu.

Včasné okamžité vybavenie

Teraz sa pozrime na kroky pre včasné okamžité uskutočnenie. Je podobná Lazy inštancii, okrem toho, že nepoužíva žiadnu synchronizovanú metódu alebo blok.

1. Nastavte Constructor ako súkromný.

Napríklad vytvárame triedu EarlyClass. Konštruktor bude taký, ako je znázornené nižšie.

private EarlyClass () ()
(
)

2. Vytvorte súkromnú statickú inštanciu pre vytvorenú triedu.

private static EarlyClass ins = new EarlyClass();

3. Vytvorte statickú metódu, ktorá vytvorí inštanciu triedy.

public static EarlyClass getInstance()
(
)

Nasleduje ukážkový kód pre včasné okamžité použitie.

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

Výkon:

Vo vyššie uvedenom programe sa inštancia vytvorí v čase načítania a vráti sa pomocou metódy getInstance (). Okrem toho je Constructor nastavený ako súkromný v rámci singletonovej inštancie.

Úspora pamäte je hlavnou výhodou použitia tohto objektu, pretože objekt sa opakovane používa a nevytvára sa znovu a znovu.

záver

V tomto dokumente sme sa zaoberali tým, ako trieda Singleton funguje pomocou diagramu triedy UML, algoritmu a vzorového kódu. Singleton Class sa používa, keď potrebujeme iba jeden objekt pre triedu a globálny prístupový bod k tomuto objektu. Na základe požiadavky je možné použiť tieto dve formy, ako je včasná inštancia a Lazy Instantiation.

Odporúčané články

Toto je sprievodca triedou Singleton v Jave. Tu diskutujeme o tom, ako trieda singleton funguje v jave spolu s implementáciou, ktorá zahŕňa lenivú instanciu a skorú instanciu. Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. Čo je to dizajnový vzor v Jave?
  2. Abstraktná trieda v Jave
  3. Poznámky jazyka Java
  4. BorderLayout v Jave
  5. JRE vs JVM | 8 najlepších rozdielov s (infografika)
  6. Ako pracovať so statickou metódou v JavaScripte?

Kategórie: