Bevezetés a Java Singleton osztályába

A Singleton osztály az objektumok létrehozását csak egy osztályra korlátozza a java virtuális gépen. Segít az objektum globális hozzáférési pontjának biztosításában is. Ezt a tervezési mintát általában a gyorsítótárazásban, az Absztrakt gyárban, a naplózásban, a prototípusban stb. Használják. Alapvető java osztályokban is használják, például a java.awt.Desktop, java.lang.Runtime. A java.lang.Runtime fájlban a Java egy osztályú futási időt biztosít, amely jelzi az aktuális futási környezetet, ahol az alkalmazás fut. Ez elősegíti az alkalmazás és a futási környezet illesztését. Egy objektumnak lennie kell, mivel a JRE egyedi. A java.awt.Desktop alkalmazásban az asztali osztály lehetővé teszi az alkalmazások számára, hogy elindítsanak egy URI-t vagy egy fájlt a felhasználó alapértelmezett böngészőjével, a levelező klienssel stb. Itt is csak az osztály egy példányának kell lennie.

Hogyan működik a Singleton osztály Java-ban

A Singleton osztályt kétféle módon lehet létrehozni.

  1. Állítsa be a kivitelezőt magánként, hogy korlátozza az objektum létrehozását.
  2. Hozzon létre egy statikus módszert az objektum példányának beszerzésére, hogy csak az osztályon belül lehessen kezelni az objektum létrehozását.

Most nézzük meg a Singleton osztály UML (Unified Modeling Language) diagramját.

Az osztály UML diagramjában az első partíció egy osztály nevét képviseli, a második partíció az attribútumokat, a harmadik partíció pedig a metódusokat képviseli. Ezenkívül a + nyilvános attribútumokat vagy metódusokat jelöl, és - magán attribútumokat vagy metódusokat jelöl. A Singleton osztály UML diagramjában az osztály neve Singleton, és ennek van egy fő módszere. A fenti módszer csak a fő módszer, a getInstance módszer és a sampleMethod módszer. A kivitelező és a példány attribútum magántulajdonban van. Ez a nyilvános main módszer kéri a példányt és az getInstance vissza a fő módszerre.

Az intuíció alapján az egyetlen különbség a normál Java osztály és a Singleton osztály között az, hogy a Java osztályban egy konstruktort fogunk használni, míg a Singletonban a getInstance () módszert fogjuk használni.

A Singleton mintázatának két formája van.

  • Lusta pillanat : Példány létrehozása, ha szükséges
  • Korai in situáció: Példány létrehozása betöltésekor.

1. Lusta pillanat

A Lazy Instantiation programban egy osztálypéldány kerül létrehozásra, amikor erre szükség van. A szinkronizált módszerben vagy blokkban hozták létre annak érdekében, hogy elkerüljék a többszálú környezetben fellépő versenyfeltételeket.

2. Korai in situáció

A korai instantációban egy példány kerül létrehozásra a betöltéskor. Annak ellenére, hogy ez a legegyszerűbb megközelítés, hátránya, hogy a példány létrehozása függetlenül attól, hogy hozzáférhető-e vagy sem.

A lusta és a korai in situáció példáját a következő szakasz ismerteti.

Singleton osztály megvalósítása Java-ban

Amint azt fentebb tárgyaltuk, a Singleton osztály létrehozható korai vagy lusta pillanatban.

Lusta pillanat

Az alábbiakban bemutatjuk a Lusta Instantiation végrehajtásának lépéseit

1. Állítsa a Konstruktort magánként.

Például létrehozunk egy LazyClass osztályt. A kivitelező az alább látható.

private LazyClass ()
(
)

2. Hozzon létre egy privát statikus példányt a létrehozott osztály számára.

private static LazyClass instance;

3. Készítsen egy statikus szinkronizált módszert, amely létrehozza az osztálypéldányt.

public static synchronized LazyClass getInstance()
(
)

4. A getInstance () módszernél először ellenőrizze, létezik-e valamilyen példány vagy sem. Ha nem található, hozzon létre egyet. Másik visszatér a példányhoz.

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

Most vizsgáljuk meg mintakóddal.

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

Kimenet:

Itt ahelyett, hogy létrehozna egy példányt a betöltéskor, a szinkronizált blokkban kerül létrehozásra. A jobb megértés érdekében olyan mintavételi módszert is megadnak, amely több objektum létrehozásától védett.

Korai megfigyelés

Most nézzük meg a korai in situáció lépéseit. Hasonló a lusta pillanatképhez, azzal a különbséggel, hogy nem használ szinkronizált módszert vagy blokkot.

1. Állítsa a Konstruktort magánként.

Például egy EarlyClass osztályt hozunk létre. A kivitelező az alább látható.

private EarlyClass () ()
(
)

2. Hozzon létre egy privát statikus példányt a létrehozott osztály számára.

private static EarlyClass ins = new EarlyClass();

3. Készítsen egy statikus módszert, amely létrehozza az osztálypéldányt.

public static EarlyClass getInstance()
(
)

Az alábbiakban látható a korai Instantináció mintakódja.

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

Kimenet:

A fenti programban egy példányt hozunk létre betöltési idő alatt, és visszaadjuk a getInstance () módszerrel. Ezenkívül a Constructor magántulajdonban van a szingulett megjelenítés részeként.

A memória megtakarítás az a fő előnye, hogy ezt objektumként újra felhasználják, és nem újra és újra készítik.

Következtetés

Ebben a dokumentumban ismertettük, hogyan működik a Singleton osztály az UML osztály diagramja, algoritmusa és mintakódja segítségével. A Singleton osztály akkor használatos, ha csak egy objektumra van szükség egy osztályhoz és egy globális hozzáférési ponthoz az objektumhoz. A két forma, mint például a korai és a lusta pillanat, a követelmény alapján alkalmazható.

Ajánlott cikkek

Ez egy útmutató a Singleton osztályhoz Java-ban. Itt megvitatjuk, hogyan működik a szingulett osztály javaban, a megvalósítás mellett, amely magában foglalja a lusta és a korai megjelenést. A további javasolt cikkeken keresztül további információkat is megtudhat -

  1. Mi a tervezési minta a Java-ban?
  2. Absztrakt osztály Java-ban
  3. Java kommentárok
  4. BorderLayout Java-ban
  5. JRE vs JVM | A 8 legfontosabb különbség az (infographics) között
  6. Hogyan működik a statikus módszer a JavaScript-ben?

Kategória: