Singleton Class v Javi - Kako uporabiti Singleton Class?



Ta članek o Singleton razredu v Javi govori o različnih načinih, kako lahko razred naredimo Singleton skupaj s praktičnimi izvedbami.

V Javi je enojni razred razred, ki ima lahko v enem trenutku samo en primerek. Je eden od petih vzorcev kreativnega oblikovanja v Javi, ki pomaga pri lažjem razvoju . Skozi medij tega članka vam bom dal jasen vpogled v to, kaj je singleton razred v Javi in ​​kako ga lahko ustvarite.

Spodaj so teme, ki jih bom obravnaval v tem članku:





Začnimo.

vloge in odgovornosti razvijalca hadoop

Kaj je razred Singleton v Javi?

Laično rečeno, razred Singleton v Javi je razred, ki omogoča dostop do njega prek enega primerka hkrati. Ta vzorec načrtovanja je namenjen omejevanju nepotrebnega instanciranja razreda in zagotavljanju, da je samo en obstaja kadar koli na primerek JVM. Tako ima pri tem vzorcu kateri koli razred, ki je opredeljen kot Singleton, samo en primerekz globalno točko dostopa do njega. V nasprotju z običajnimi razredi se razred singleton do konca življenjskega cikla aplikacije ne uniči.



Zakaj pa sploh potrebujemo razred Singleton?

No, z omejitvijo ustvarjanja primerka razreda prihrani prostor v pomnilniku, saj zdaj objekt ne bo ustvarjen vsakič, ko bo podana nova zahteva. Namesto tega bo večkrat uporabljen en predmet. To je razlog, da se vzorec Singleton v Javi večinoma uporablja in baze podatkov. V osnovi se uporablja za beleženje, predpomnjenje, združevanje niti, nastavitve konfiguracije in še veliko več.

Upam, da vam je jasen koncept razreda Singleton v Javi. Torej, nadaljujmo zdaj pri temČlanek Singleton Class v Javi in ​​poglejte, kako so ustvarjeni.



Načini oblikovanja razreda Java Singleton

Če želite v Java narediti razred eno enoto, potrebujete naslednje tri stvari:

  1. statični član predavanja
  2. zasebni konstruktor
  3. statična tovarniška metoda

Ker Java razvijalcem omogoča raziskovanje njihovih obzorij, obstajajona več načinov, na katere lahko oblikujete razred Singleton. Spodaj sem naštel najbolj priljubljene.

  1. Način nestrpne inicializacije
  2. Metoda lene inicializacije
  3. Metoda varne niti z enim navojem
  4. Lena inicializacija z metodo dvojnega zaklepanja
  5. Metoda lenega nalaganja
  6. Metoda inicializacije statičnega bloka

Potopimo se zdaj globlje v vsakega od teh pristopov enega za drugim.

1. Nestrpna metoda inicializacije

To je najlažji način ustvarjanja razreda Singleton, kjer je primerek ustvarjen v času nalaganja razreda. Če želite s to metodo ustvariti razred posameznika, sledite spodnjim korakom:

  1. Konstruktor razglasite za zasebnega.
  2. Naslednji korak je ustvariti člana zasebnega razreda za ta razred Singleton.
  3. Zdaj morate določiti tovarniško metodo, ki bo uporabljena za vrnitev predmeta vašega razreda, ki smo ga ustvarili kot primerek člana razreda.
  4. Statičnega člana lahko celo razglasite za javnega, če želite neposredno dostopati do tega statičnega primerka.

Zdaj pa poglejmo, kako jih uporabiti.

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

Če vidite kodo, lahko opazite, da vsakič, ko ustvarimo primer za objekt, ki ga uporabljamogetInstance ()metode, namesto da prikliče razred gradbenik .Ima pa svoje slabosti. Če s to metodo izdelate enoznak razreda, se ustvari primerek ne glede na to, ali ga aplikacija uporablja ali ne.

Torej, pojdimo naprej in poglejmo še en način ustvarjanja singleton razreda v Javi.

2. Metoda lene inicializacije

Ta metoda se imenuje lena inicializacija, ker odloži ustvarjanje primerka razreda do njegove prve uporabe. Mislim, s to metodo se objekt ustvari le, če je potreben. Pomaga pri izogibanju nepotrebnemu ustvarjanju . Če želite na ta način oblikovati razred posameznika, sledite spodnjim korakom:

  1. Najprej razglasite konstruktor kot zaseben.
  2. Nato morate ustvariti zasebni statični primerek za ta razred, vendar ga še ni treba ustvariti.
  3. Na koncu ustvarite tovarniško metodo, ki bo najprej preverila, ali je član primerka ničen ali ne. V nasprotnem primeru bo ustvaril primerek razreda singleton in ga vrnil.

Spodnja koda prikazuje, kako to izvesti.

// Lazy Initialization javni razred LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {sinhronizirano (LazySingleton.class) {INSTANCE = new LazySingleton ()}} vrnitev INSTANCE}}

3. Varno navoj za posameznike Metoda

Toda zgornji pristop lahko sproži nekaj pomislekov v sočasnih scenarijih. Ker se enojni vzorec uporablja predvsem pri večnitnih in ifveč niti hkrati vnese pogoj if, kar lahko sproži težave. Da bi se temu izognili, skušamo z sinhronizacijo metode globalnega dostopa ustvariti razred singleton, ki je varen pred nitmi. To zagotavlja, da to metodo v vsakem trenutku izvaja samo ena nit. Za izvedbo glejte spodnjo kodo:

// Thread Safe Singleton javni razred ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} javni statični sinhronizirani ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSington}

Toda včasih lahko ta pristop postane tudi zelo okoren, kot vsakič, ko metodase pokliče, mora počakati, da se ključavnica sprosti, preden jo metoda lahko uporabi. Posledica tega je upočasnitev procesa in nas vodi do naslednjega pristopa, ki jeLena inicializacija z dvojnim zaklepanjem.

4. Lena inicializacija z dvojnim zaklepanjem Metoda

Pri tem pristopu ne sinhroniziramo metod. Kodo za ustvarjanje predmetov zavijemo v sinhroniziran blok.Lahko rečete, da tako, da predhodno preverite zaklepanje nitizmanjša število pridobitev ključavnic. Rezultat tega pristopa je običajno povečanje učinkovitosti aplikacije. Oglejte si spodnjo kodo, da vidite, kako je to storjeno.

// Lazy Initialization with Double Lock javni razred LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized.classingo null) {INSTANCE = new LazyDoubleLockSingleton ()}}} vrnitev INSTANCE}}

5. Metoda lenega nalaganja

Ta metoda temelji na JSL (Java Language Specification) in v skladu s tem bo nalagal statične člane podatkov samo, kadar so potrebni. Ko je vaš razred singleton naložen v JVM, primerek ni ustvarjen. Nadalje se med izvajanjem programa prikliče globalna metoda v zaporednem vrstnem redu. S to metodo vam ni treba izrecno sinhronizirati statičnega getInstance () za nalaganje in inicializacijo. Statični član razreda bo priklican v pravilnem zaporedju, preostali sočasni klici globalne metode se vrnejo v enakem vrstnem redu, ne da bi bilo treba izvajati režijske stroške sinhronizacije.

Spodaj je koda za izvedbo istega.

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

6. Metoda inicializacije statičnega bloka

Ta metoda ustvarjanja enojnega razreda v Javi jepodobno kot nestrpna metoda inicializacije. Edina razlika je v tem, da je primerek za ta razred ustvarjen znotraj statičnega bloka funkcionalnost.

// Statični blok Inicializacija javni razred StaticBlockSingleton {zasebni statični StaticBlockSingleton INSTANCE zasebni StaticBlockSingleton () {} // ravnanje z izjemami v statičnem bloku static {try {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {throw new RuntimeException ('Izjema je nastala med ustvarjanjem razreda Singleton ')}} javni statični StaticBlockSingleton getInstance () {return INSTANCE}}

S tem smo prišli do konca tega članka o razredu Singleton v Javi. Če želite izvedeti več o Javi, se lahko obrnete na našo .

Zdaj, ko ste razumeli, kaj je razred Singleton v Javi, si oglejte Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, razširjenih po vsem svetu. Edurekin tečaj za usposabljanje in certificiranje Java J2EE in SOA je namenjen študentom in strokovnjakom, ki želijo biti razvijalec Java. Tečaj je zasnovan tako, da vam omogoči uvod v programiranje Java in vas usposobi za osnovne in napredne koncepte Java, skupaj z različnimi Java okviri, kot so Hibernate & Spring

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje v tem članku o »Singleton Class in Java« in kmalu vam bomo odgovorili.