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.
- Állítsa be a kivitelezőt magánként, hogy korlátozza az objektum létrehozását.
- 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 -
- Mi a tervezési minta a Java-ban?
- Absztrakt osztály Java-ban
- Java kommentárok
- BorderLayout Java-ban
- JRE vs JVM | A 8 legfontosabb különbség az (infographics) között
- Hogyan működik a statikus módszer a JavaScript-ben?