Singleton klase Java - kā lietot Singleton klasi?



Šajā rakstā par Java Singleton klasi tiek runāts par dažādiem veidiem, kā klasi var padarīt par Singleton, kā arī par praktisko ieviešanu.

Java valodā singleton klase ir klase, kurai noteiktā laikā var būt tikai viens gadījums. Tas ir viens no pieciem Java radošā dizaina modeļiem, kas palīdz bez piepūles izstrādāt . Izmantojot šo rakstu, es jums sniegšu skaidru ieskatu par to, kas ir Java singleton klase un kā jūs to varat izveidot.

Tālāk ir norādītas tēmas, kuras es apskatīšu šajā rakstā:





Sāksim.

Kas ir singletona klase Java?

Nespeciālistiem runājot, Singleton klase Java ir klase, kas ļauj tai piekļūt, izmantojot vienu instanci vienlaikus. Šis dizaina modelis ir paredzēts, lai ierobežotu nevajadzīgu klases ekscentriju un nodrošinātu, ka tikai viens pastāv jebkurā JVM instances laika posmā. Tādējādi ar šo modeli jebkurai klasei, kas tiek definēta kā Singleton, ir tikai viens eksemplārsar globālu piekļuves punktu tam. Atšķirībā no parastajām klasēm, vienreizējā klase līdz lietojumprogrammu dzīves cikla beigām netiek iznīcināta.



Bet kāpēc mums vispār nepieciešama Singleton klase?

Labi, ierobežojot klases instances izveidošanu, tiek ietaupīta atmiņas vieta, jo tagad objekts netiks izveidots katru reizi, kad tiek iesniegts jauns pieprasījums. Tā vietā viens objekts tiks izmantots atkārtoti. Tas ir iemesls, kāpēc Singleton modeli Java parasti lieto kopā un datu bāzes lietojumprogrammas. To galvenokārt izmanto reģistrēšanai, kešatmiņai, pavedienu apvienošanai, konfigurācijas iestatījumiem un daudziem citiem.

Es ceru, ka jums ir skaidrs Singleton klases jēdziens Java valodā. Tātad, ļaujiet tagad turpināt šo darbībuSingleton klases Java rakstā un uzziniet, kā tie tiek izveidoti.



Java Singleton klases noformēšanas veidi

Lai izveidotu klases singlu Java, jums ir nepieciešamas šādas trīs lietas:

  1. statisks klases loceklis
  2. privāts konstruktors
  3. statiskā rūpnīcas metode

Tā kā Java ļauj izstrādātājiem izpētīt viņu redzesloku, tādi irvairāki veidi, kā jūs varat izveidot Singleton klasi. Zemāk esmu uzskaitījis populārākos.

java izveidot objektu masīvu
  1. Dedzīgas inicializācijas metode
  2. Slinkās inicializācijas metode
  3. Thread Safe Singleton metode
  4. Slinka inicializēšana ar dubultās bloķēšanas metodi
  5. Slinkās slodzes metode
  6. Statiskā bloka inicializācijas metode

Tagad ienirsim dziļāk katrā no šīm pieejām pa vienam.

1. Dedzīgas inicializācijas metode

Šī ir vienkāršākā metode, kā izveidot Singleton klasi, kur eksemplārs tiek izveidots klases ielādes laikā. Lai izveidotu vienklases klasi, izmantojot šo metodi, jums jāveic šādas darbības:

  1. Pasludiniet konstruktoru par privātu.
  2. Nākamais solis ir izveidot privātklases dalībnieku šai Singleton klasei.
  3. Tagad jums ir jādefinē rūpnīcas metode, kas tiks izmantota, lai atgrieztu jūsu klases objektu, kuru mēs esam izveidojuši kā klases locekļa instanci.
  4. Jūs pat varat pasludināt statisku dalībnieku par publisku, ja vēlaties tieši piekļūt šai statiskajai instancei.

Apskatīsim, kā tos ieviest.

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

Ja redzat kodu, varat novērot, ka katru reizi, kad mēs veicam objektu, kuru mēs izmantojamgetInstance ()metodi, nevis klases piesaukšanu celtnieks .Bet tam ir savi trūkumi. Ja izmantojat šo metodi, lai izveidotu klases singletonu, eksemplārs tiktu izveidots neatkarīgi no tā, vai lietojumprogramma to izmanto vai nē.

Tātad, ejam uz priekšu un redzēsim citu veidu, kā izveidot vienkrāsainu klasi Java.

2. Slinkās inicializācijas metode

Šo metodi sauc par slinku inicializāciju, jo tā atliek klases instances izveidi līdz tās pirmajai izmantošanai. Es domāju, ka ar šo metodi objekts tiek izveidots tikai tad, ja tas ir nepieciešams. Tas palīdz izvairīties no nevajadzīgas . Lai šādā veidā izveidotu vienklases klasi, jums ir jāveic šādas darbības:

  1. Pirmkārt, pasludiniet konstruktoru par privātu.
  2. Tad jums ir jāizveido privāta statiska instance šai klasei, taču vēl nav nepieciešams to instantizēt.
  3. Visbeidzot, izveidojiet rūpnīcas metodi, kas vispirms pārbaudīs, vai instances dalībnieks nav derīgs. Ja nē, tas jums izveidos singleton klases instanci un atgriezīs to.

Zemāk redzamais kods parāda, kā to izdarīt.

// Lazy Initialization publiskā klase LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySing atgriezties INSTANCE}}

3. Thread Safe Singleton Metode

Bet iepriekš minētā pieeja var radīt zināmas bažas vienlaicīgajos scenārijos. Tā kā singleton modeli galvenokārt izmanto ar vairāku pavedienu un javairāki pavedieni vienlaikus ievada nosacījumu if, tas var radīt problēmas. Lai no tā izvairītos, mēs cenšamies izveidot vienreizējas vītnes klasi, sinhronizējot globālās piekļuves metodi. Tas nodrošina, ka tikai viena pavediena izpilda šo metodi jebkurā laika posmā. Skatiet zemāk esošo kodu, lai redzētu ieviešanu:

// Thread Safe Singleton publiskā klase ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE privātā ThreadSafeSingleton () {} public static synchronized ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()}

Tomēr dažkārt šī pieeja var kļūt ļoti apgrūtinoša kā katru reizi, kad tiek izmantota metodetiek izsaukts, pirms metode to var izmantot, jāgaida, kamēr atslēga tiks atbrīvota. Tā rezultātā process palēninās un mūs noved pie nākamās pieejasSlinka inicializēšana ar dubulto slēdzeni.

4. Slinka inicializēšana ar dubulto atslēgu Metode

Šajā pieejā mēs nesinhronizējam metodes. Drīzāk objekta izveides kodu iesaiņojam sinhronizētā blokā.Jūs varat teikt, ka, iepriekš pārbaudot pavedienu bloķēšanu, tassamazina slēdzenes iegūšanas skaitu. Šī pieeja parasti palielina lietojumprogrammas veiktspēju. Pārbaudiet zemāk esošo kodu, lai uzzinātu, kā tas tiek darīts.

// Lazy inicializēšana ar Double Lock publisko klasi LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (Lazy null) {INSTANCE = new LazyDoubleLockSingleton ()}}} atgriež INSTANCE}}

5. Slinkās slodzes metode

Šī metode ir balstīta uz JSL (Java Language Specification) un saskaņā ar to statiskos datu dalībniekus ielādēs tikai tad, kad tie būs nepieciešami. Tādējādi, kad jūsu vienreizējā klase tiek ielādēta JVM, neviens eksemplārs netiek izveidots. Programmas izpildes laikā globālā metode tiek izmantota secīgā secībā. Izmantojot šo metodi, jums nav skaidri jāinhronizē statiskā getInstance (), lai ielādētu un inicializētu. Statiskās klases dalībnieks tiks izsaukts pareizi secīgi, pārējie vienlaicīgi izmantotie globālās metodes izsaukumi tiek atgriezti tajā pašā secībā, neveicot sinhronizācijas piesaisti.

Zemāk ir kods, lai veiktu to pašu.

// 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. Statiskā bloka inicializācijas metode

Šī metode, kā izveidot atsevišķu klasi Java, irlīdzīga labprātīgai inicializācijas metodei. Vienīgā atšķirība ir tā, ka šīs klases eksemplārs tiek izveidots statiskajā blokā ar funkcionalitāte.

// Static Block Initialization publiskā klase StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // izņēmumu apstrāde statiskā bloka statiskā {try {INSTANCE = new StaticBlockSingleton ()} catch (e-izņēmums) {thrown new RuntimeException ('Exception notikuši' veidojot Singleton klasi ')}} public static StaticBlockSingleton getInstance () {return INSTANCE}}

Tas noved mūs pie šī raksta par Singleton klasi Java beigās. Ja vēlaties uzzināt vairāk par Java, varat atsaukties uz mūsu .

Tagad, kad esat sapratis, kas ir Singleton klase Java, pārbaudiet Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts studentiem un profesionāļiem, kuri vēlas būt Java izstrādātāji. Kurss ir paredzēts, lai dotu jums sākumu Java programmēšanā un apmācītu gan Java, gan uzlabotas koncepcijas, kā arī dažādas Java struktūras, piemēram, Hibernate & Spring.

Vai mums ir jautājums? Lūdzu, pieminējiet to šī raksta “Singleton Class in Java” komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.