„Singleton“ klasė „Java“ - kaip naudotis „Singleton Class“?



Šiame straipsnyje apie „Singleton“ klasę „Java“ kalbama apie įvairius būdus, kaip klasė gali būti sukurta „Singleton“ kartu su praktiniais įgyvendinimais.

„Java“ pavieniui skirta klasė yra klasė, kuri tam tikru metu gali turėti tik vieną egzempliorių. Tai yra vienas iš penkių „Java“ kūrybinio dizaino modelių, kuris padeda lengvai kurti . Per šį straipsnį aš suteiksiu jums aiškių įžvalgų apie tai, kas yra „Java“ pavienė klasė ir kaip ją galite sukurti.

Toliau pateikiamos temos, kurias aptarsiu šiame straipsnyje:



.trim () java

Pradėkime.

Kas yra „Singleton“ klasė „Java“?

Kalbant paprastai, „Singleton“ klasė „Java“ yra klasė, leidžianti ją pasiekti per vieną egzempliorių vienu metu. Šis dizaino modelis skirtas apriboti nereikalingą klasės egzempliorių ir užtikrinti, kad tik vienas egzistuoja bet kuriuo JVM egzemplioriaus momentu. Taigi pagal šį modelį bet kuri klasė, apibrėžta kaip „Singleton“, turi tik vieną egzemplioriųsu pasauliniu prieigos prie jo tašku. Skirtingai nuo įprastų klasių, vienkartinė klasė nesunaikinama iki programų gyvavimo ciklo pabaigos.



Bet kodėl mums pirmiausia reikia „Singleton“ klasės?

Na, apribojus klasės egzempliorių kūrimą, sutaupoma vietos atmintyje, nes dabar objektas nebus kuriamas kiekvieną kartą, kai pateikiama nauja užklausa. Vietoj to, vienas objektas bus naudojamas pakartotinai. Tai yra priežastis, kodėl „Singleton“ modelis „Java“ dažniausiai naudojamas ir duomenų bazių programas. Iš esmės jis naudojamas registravimui, talpyklai, sriegių sujungimui, konfigūracijos nustatymams ir daugeliui kitų.

Tikiuosi, kad jūs suprantate „Singleton“ klasės „Java“ koncepciją. Taigi, dabar galime tęsti toliau„Singleton Class“ „Java“ straipsnyje ir sužinokite, kaip jie yra sukurti.



„Java Singleton“ klasės kūrimo būdai

Norint sukurti „Java“ klasės pavienį, jums reikia šių trijų dalykų:

  1. statinis klasės narys
  2. privatus konstruktorius
  3. statinis gamyklos metodas

Kadangi „Java“ leidžia kūrėjams ištirti jų horizontus, jų yradaugybė būdų, kaip galite sukurti „Singleton“ klasę. Žemiau išvardijau populiariausius.

  1. Nekantrus inicijavimo metodas
  2. Tinginio inicializavimo metodas
  3. „Thread Safe Singleton“ metodas
  4. Tinginio inicijavimas dvigubo užrakto metodu
  5. Tinginio apkrovos metodas
  6. Statinio bloko inicijavimo metodas

Dabar panardinkime giliau į kiekvieną iš šių požiūrių po vieną.

1. Nekantrus inicijavimo metodas

Tai paprasčiausias būdas sukurti „Singleton“ klasę, kur egzempliorius sukurtas klasės įkėlimo metu. Norėdami sukurti vienkartinę klasę naudodami šį metodą, turite atlikti toliau nurodytus veiksmus:

  1. Paskelbkite konstruktorių privačiu.
  2. Kitas žingsnis - sukurti šios „Singleton“ klasės privačios klasės narį.
  3. Dabar turite apibrėžti gamyklinį metodą, kuris bus naudojamas grąžinti jūsų klasės objektą, kurį sukūrėme kaip klasės nario egzempliorių.
  4. Jūs netgi galite paskelbti, kad statinis narys yra viešas, jei norite tiesiogiai pasiekti šį statinį egzempliorių.

Dabar pažiūrėkime, kaip tai įgyvendinti.

// „Eager Initialization“ viešoji klasė „EagerSingleton“ {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} public static EagerSingleton getInstance () {return INSTANCE}}

Jei matote kodą, galite pastebėti, kad kiekvieną kartą, kai mes išaiškiname objektą, kurį mes naudojame„getInstance“ ()metodą, o ne klasę statybininkas .Bet tai turi savų trūkumų. Jei naudosite šį metodą kurdami klasės pavienį, egzempliorius būtų sukurtas neatsižvelgiant į tai, ar programa jį naudoja, ar ne.

Taigi, eikime į priekį ir pamatykime kitą būdą sukurti „Java“ pavienę klasę.

2. Tinginio inicializavimo metodas

Šis metodas vadinamas tingiu inicializavimu, nes jis atideda klasės egzemplioriaus kūrimą iki jo pirmo naudojimo. Turiu omenyje tai, kad taikant šį metodą objektas sukuriamas tik tada, kai to reikia. Tai padeda išvengti nereikalingo . Jei norite tokiu būdu sukurti vienkartinę klasę, turite atlikti toliau nurodytus veiksmus:

skirtumai tarp hashmap ir hashtable
  1. Pirmiausia paskelbkite konstruktorių privačiu.
  2. Tada jums reikia sukurti privatų šios klasės klasinį egzempliorių, tačiau dar nereikia jo inicijuoti.
  3. Galiausiai sukurkite gamyklinį metodą, kuris pirmiausia patikrins, ar egzemplioriaus narys yra nulinis, ar ne. Jei ne, tai sukurs jums pavienės klasės egzempliorių ir grąžins jį.

Žemiau kodas rodo, kaip tai atlikti.

// 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 grąžinti INSTANCE}}

3. „Thread Safe Singleton“ Metodas

Tačiau pirmiau pateiktas požiūris gali kelti tam tikrų abejonių dėl tuo pačiu scenarijų. Kadangi pavienis raštas dažniausiai naudojamas su daugiasriegiais siūlais ir jeikelios gijos tuo pačiu metu įveda sąlygą „if“, tai gali kelti problemų. Kad to išvengtume, mes stengiamės sukurti sinchronizuotą siūlų klasę, sinchronizuodami visuotinės prieigos metodą. Tai užtikrina, kad šį metodą bet kuriuo laiko momentu vykdo tik viena gija. Peržiūrėkite žemiau pateiktą kodą, kad pamatytumėte įgyvendinimą:

masyvo dydis „javascript“
// Thread Safe Singleton viešoji klasė ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} public static synchronized ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()}

Tačiau kartais šis metodas taip pat gali tapti labai sudėtingas, nes kiekvieną kartą metodasyra iškviečiamas, reikia palaukti, kol užraktas bus atleistas, kol metodas galės jį naudoti. Tai lėtina procesą ir veda mus prie kito požiūrioTingus inicijavimas su dviguba spyna.

4. Tingaus inicijavimas naudojant dvigubą užraktą Metodas

Taikant šį metodą, mes nesinchronizuojame metodų. Veikiau objekto kūrimo kodą apgaubiame sinchronizuotame bloke.Galite pasakyti, kad prieš tai patikrinę sriegio užraktussumažina spynų įsigijimų skaičių. Šis metodas paprastai padidina programos našumą. Patikrinkite žemiau pateiktą kodą, kad pamatytumėte, kaip tai daroma.

// Lazy inicijavimas naudojant „Double Lock“ viešąją klasę „LazyDoubleLockSingleton“ {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (Lazy null) {INSTANCE = new LazyDoubleLockSingleton ()}}} grąžinti INSTANCE}}

5. Tinginio apkrovos metodas

Šis metodas pagrįstas JSL („Java“ kalbos specifikacija) ir pagal tai statinius duomenų narius įkels tik tada, kai jų reikės. Taigi, kai jūsų pavienė klasė įkeliama į JVM, egzempliorius nesukuriamas. Be to, vykdant programą, visuotinis metodas naudojamas eilės tvarka. Naudodami šį metodą, neturite aiškiai sinchronizuoti statinio „getInstance“ (), kad įkeltumėte ir inicializuotumėte. Statinės klasės narys bus iškviečiamas tinkamai nuosekliai, likusieji kartu vykstantys visuotinio metodo iškvietimai bus grąžinti ta pačia tvarka, neatliekant sinchronizavimo pridėtinės vertės.

Žemiau yra kodas atlikti tą patį.

// 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. Statinio bloko inicializavimo metodas

Šis „Java“ pavienės klasės kūrimo būdas yrapanašus į nekantraus inicijavimo metodą. Vienintelis skirtumas yra tas, kad šios klasės egzempliorius sukurtas statiniame bloke, turinčiame funkcionalumas.

// „Static Block Initialization“ viešoji klasė „StaticBlockSingleton“ {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // išimčių tvarkymas statinio bloko static {try {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {thrown new RuntimeException ('Exception įvyko kuriant „Singleton Class“)}} public static StaticBlockSingleton getInstance () {return INSTANCE}}

Tai leidžia mums užbaigti šį straipsnį apie „Singleton“ klasę „Java“. Jei norite sužinoti daugiau apie „Java“, galite kreiptis į mūsų .

Dabar, kai supratote, kas yra „Singleton“ klasė „Java“, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žvalgytis į „Java“ programavimą ir išmokyti pagrindinių bei pažangių „Java“ koncepcijų kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio straipsnio „Singleton Class in Java“ komentarų skyriuje ir mes kuo greičiau susisieksime su jumis.