Singleton osztály Java-ban - Hogyan kell használni a Singleton osztályt?



Ez a cikk a Java-i Singleton osztályról szól arról, hogy egy osztály hogyan hozható létre Singleton-ként, gyakorlati megvalósításokkal együtt.

A Java-ban a szingulett osztály olyan osztály, amelynek adott időpontban csak egy példánya lehet. Ez a Java öt kreatív tervezési mintájának egyike, amely elősegíti a . A cikk médiumán keresztül világos betekintést nyújtok abba, hogy mi a szingleton osztály a Java-ban, és hogyan hozhatod létre.

Az alábbiakban bemutatom azokat a témákat, amelyekkel a cikkben foglalkozom:





Lássunk neki.

Mi a Singleton osztály a Java-ban?

A laikusok szempontjából a Singleton osztály a Java-ban az az osztály, amely egyszerre egyetlen példányon keresztül teszi lehetővé a hozzáférést hozzá. Ez a tervezési minta az osztály felesleges példányosításának korlátozására szolgál, és csak annak biztosítására JVM példányonként bármikor létezik. Így ezzel a mintával bármely, Singletonként definiált osztálynak csak egyetlen példánya vanglobális hozzáférési ponttal. A normál osztályokkal ellentétben az egyszemélyes osztály nem pusztul el az alkalmazások életciklusának végére.



De miért van szükségünk elsősorban egy Singleton osztályra?

Nos, egy osztály példány létrehozásának korlátozásával memóriaterületet takarít meg, mivel az objektum nem jön létre minden alkalommal, amikor új kérelmet nyújtanak be. Ehelyett egyetlen objektumot fognak ismételten használni. Ez az oka annak, hogy a Java Singleton mintáját többnyire együtt használják és adatbázis-alkalmazások. Alapvetően naplózásra, gyorsítótárra, szálak összesítésére, konfigurációs beállításokra és még sok másra használják.

egyesítés rendezési kód c ++

Remélem, hogy tisztában van a Java Singleton osztály fogalmával. Tehát haladjunk tovább ebbenSingleton Class a Java cikkben, és nézze meg, hogyan jönnek létre.



Java Singleton osztály megtervezésének módjai

Ahhoz, hogy egy osztályt készítsen Java-ban, a következő három dologra van szüksége:

  1. egy osztály statikus tagja
  2. magánépítő
  3. statikus gyári módszer

Mivel a Java segítségével a fejlesztők felfedezhetik horizontjaikat, vannak ilyenekszámos módon megtervezheti a Singleton osztályt. Az alábbiakban felsoroltam a legnépszerűbbeket.

  1. Lelkes inicializálási módszer
  2. Lusta inicializálási módszer
  3. Menetbiztos Singleton módszer
  4. Lusta inicializálás kettős zár módszerrel
  5. Lusta terhelés módszere
  6. Statikus blokk inicializálási módszer

Merüljünk most mélyebben e megközelítések mindegyikébe.

1. Lelkes inicializálási módszer

Ez a legegyszerűbb módszer egy Singleton osztály létrehozására, ahol a példány az osztály betöltésekor jön létre. Ha szingulett osztályt szeretne létrehozni ezzel a módszerrel, kövesse az alábbi lépéseket:

A hacker és az etikus hacker között a fő különbség a következő:
  1. Nyilvánítsa a kivitelezőt privátnak.
  2. A következő lépés egy privát osztálytag létrehozása ehhez a Singleton osztályhoz.
  3. Most meg kell határoznia egy gyári metódust, amely az osztály objektumának visszaküldésére szolgál, amelyet az osztálytag példányaként hoztunk létre.
  4. Akár egy statikus tagot nyilvánossá nyilváníthat, ha közvetlenül hozzá szeretne férni ehhez a statikus példányhoz.

Most nézzük meg, hogyan lehet ezeket megvalósítani.

// Eager Initialization public class EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} public static EagerSingleton getInstance () {return INSTANCE}}

Ha látja a kódot, megfigyelheti, hogy minden alkalommal, amikor egy objektumot példányosítunk, használjuk agetInstance ()módszer helyett az osztály meghívása építész .De megvannak a maga hátrányai. Ha ezt a módszert használja osztály szingulett készítéséhez, akkor egy példány létrejön, függetlenül attól, hogy az alkalmazás használja-e vagy sem.

Tehát haladjunk előre, és lássuk a szingleton osztály létrehozásának másik módját a Java-ban.

2. Lusta inicializálási módszer

Ezt a módszert lusta inicializálásnak hívják, mert az első példányig elhalasztja az osztálypéldány létrehozását. Úgy értem, hogy ezzel a módszerrel egy objektum csak akkor jön létre, ha arra szükség van. Segít elkerülni a . Egyedülálló osztály ilyen módon történő megtervezéséhez kövesse az alább felsorolt ​​lépéseket:

  1. Először is nyilvánítsa a kivitelezőt privátnak.
  2. Ezután létre kell hoznia egy privát statikus példányt ehhez az osztályhoz, de még nem kell azt példányosítani.
  3. Végül hozzon létre egy gyári módszert, amely először ellenőrzi, hogy a példánytag null-e vagy sem. Ha nem, akkor létrehozza az Ön számára a szingulett osztály egy példányát, és visszaadja.

Az alábbi kód megmutatja, hogyan kell ezt végrehajtani.

// Lazy Initialization public class LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySing visszatérés INSTANCE}}

3. Thread Safe Singleton Módszer

De a fenti megközelítés aggályokat vethet fel az egyidejű forgatókönyvekben. Mivel a szingulett mintát főleg több szálon használják, és hatöbb szál egyszerre adja meg az if feltételt, ez problémákat vethet fel. Ennek elkerülése érdekében a globális hozzáférési módszer szinkronizálásával próbálunk létrehozni egy szálbiztos szingletont. Ez biztosítja, hogy csak egy szál hajtsa végre ezt a módszert az idő bármely pontján. A megvalósítás megtekintéséhez olvassa el az alábbi kódot:

// Thread Safe Singleton nyilvános osztály ThreadSafeSingleton {privát statikus ThreadSafeSingleton INSTANCE privát ThreadSafeSingleton () {} nyilvános statikus szinkronizált ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = új ThreadSafeSingleton ()}

De időnként ez a megközelítés nagyon nehézkessé is válhat, mint a módszer minden egyes alkalmahívják, meg kell várnia, amíg a zár felszabadul, mielőtt a módszer használni tudja. Ennek eredményeként a folyamat lelassul, és a következő megközelítéshez vezetünkLusta inicializálás dupla zárral.

4. Lusta inicializálás kettős zárral Módszer

Ebben a megközelítésben nem szinkronizáljuk a módszereket. Inkább egy objektum létrehozási kódját burkoljuk be egy szinkronizált blokkba.Azt mondhatja, hogy előzetesen ellenőrizve a szálzárakat, aztcsökkenti a zárszerzések számát. Ez a megközelítés általában az alkalmazás teljesítményének növelését eredményezi. Nézze meg az alábbi kódot, hogy megtudja, hogyan történik.

python __init__ módszer
// Lazy inicializálás Double Lock nyilvános osztállyal LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (Lazy null) {INSTANCE = új LazyDoubleLockSingleton ()}}} visszatérés INSTANCE}}

5. Lusta terhelés módszere

Ez a módszer a JSL-en (Java Language Specification) alapszik, és ennek megfelelően csak akkor tölti be a statikus adattagokat, ha szükség van rájuk. Így amikor a szingulett osztálya betöltődik a JVM-be, nem jön létre példány. Ezenkívül a program végrehajtása során a globális metódust sorrendben hívják meg. Ezzel a módszerrel nem kell szinkronizálnia a statikus getInstance () -t a betöltéshez és az inicializáláshoz. A statikus osztálytagot megfelelő szekvenált módon hívják meg, a globális módszer párhuzamos invokációinak többi részét ugyanabban a sorrendben adják vissza, anélkül, hogy a szinkronizálási rezsit kellene elvégezni.

Az alábbiakban az azonos művelet végrehajtására szolgáló kód található.

// Lazy Load Method public class LazyLoadSingleton {private LazyLoadSingleton () {} private static class SingletonClassHolder {static final Var INSTANCE = new LazyLoadSingleton ()} public static LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}

6. Statikus blokk inicializálási módszer

Ez a módszer a szingleton osztály létrehozására a Java-ban azhasonló a lelkes inicializálási módszerhez. Az egyetlen különbség az, hogy ennek az osztálynak a példánya a statikus blokkban jön létre funkcionalitás.

// Static Block Initialization nyilvános osztály StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // kivételkezelés statikus blokkban static {try {INSTANCE = new StaticBlockSingleton ()} catch (e kivétel) {dobjon új RuntimeException ('Kivétel történt Singleton osztály létrehozása közben ')}} public static StaticBlockSingleton getInstance () {return INSTANCE}}

Ezzel eljutottunk a Java Singleton osztályáról szóló cikk végéhez. Ha többet szeretne tudni a Java-ról, olvassa el a mi oldalunkat .

Most, hogy megértette, mi a Singleton osztály a Java-ban, nézze meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték, hogy előrelépést nyújtson a Java programozásban, és kiképezzen mind az alapvető, mind a fejlett Java koncepciókra, valamint a különböző Java keretrendszerekkel, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg a „Singleton Class in Java” cikk megjegyzés szakaszában, és a lehető leghamarabb kapcsolatba lépünk Önnel.