Singleton Class i Java - Hvordan bruges Singleton Class?



Denne artikel om Singleton Class i Java taler om de forskellige måder, hvorpå en klasse kan laves Singleton sammen med praktiske implementeringer.

I Java er en singleton-klasse en klasse, der kun kan have en forekomst på et givet tidspunkt. Det er et af de fem Creational Design mønstre i Java, der hjælper med ubesværet udvikling af . Gennem mediet i denne artikel vil jeg give dig klar indsigt i, hvad der er en singleton-klasse i Java, og hvordan du kan oprette den.

hvordan man indstiller sti til java

Nedenfor er de emner, jeg vil dække i denne artikel:





Lad os komme igang.

Hvad er en Singleton-klasse i Java?

I lægmandssprog er en Singleton-klasse i Java den klasse, der giver adgang til den gennem en enkelt forekomst ad gangen. Dette designmønster er til at begrænse den unødvendige instantiering af en klasse og sikre, at kun en findes til enhver tid pr. JVM-forekomst. Med dette mønster har enhver klasse, der er defineret som Singleton, kun en enkelt forekomstmed et globalt adgangspunkt til det. I modsætning til normale klasser ødelægges en singleton-klasse ikke ved afslutningen af ​​applikationernes livscyklus.



Men hvorfor har vi i første omgang brug for en Singleton-klasse?

Ved at begrænse forekomst af en klasse sparer det hukommelsesplads, da objektet nu ikke oprettes hver gang en ny anmodning fremsættes. I stedet bruges et enkelt objekt gentagne gange. Dette er grunden til, at Singleton-mønsteret i Java mest bruges med og databaseapplikationer. Det bruges dybest set til logning, caching, thread pooling, konfigurationsindstillinger og mange flere.

Jeg håber, du er klar med begrebet Singleton-klasse i Java. Så lad os nu gå videre i detteSingleton Class i Java-artikel og se, hvordan de oprettes.



Måder at designe en Java Singleton-klasse

For at skabe en klassesingleton i Java har du brug for følgende tre ting:

  1. statisk medlem af en klasse
  2. privat konstruktør
  3. statisk fabriksmetode

Da Java lader udviklerne udforske deres horisonter, er deren række måder, hvorpå du kan designe en Singleton-klasse. Nedenfor har jeg listet de mest populære.

  1. Ivrig initialiseringsmetode
  2. Lazy Initialization Method
  3. Trådsikker Singleton-metode
  4. Lazy Initialization med Double Lock Method
  5. Lazy Load Method
  6. Statisk blokinitialiseringsmetode

Lad os nu dykke dybere ned i hver af disse tilgange en efter en.

1. Ivrig initialiseringsmetode

Dette er den nemmeste metode til at oprette en Singleton-klasse, hvor forekomsten oprettes på tidspunktet for klassens indlæsning. For at oprette en singleton-klasse ved hjælp af denne metode skal du følge nedenstående trin:

  1. Erklær konstruktøren privat.
  2. Næste trin er at oprette et privat klassemedlem til denne Singleton-klasse.
  3. Nu skal du definere en fabriksmetode, der skal bruges til at returnere objektet til din klasse, som vi har oprettet som en forekomst af klassemedlemmet.
  4. Du kan endda erklære et statisk medlem offentligt, hvis du vil have direkte adgang til denne statiske forekomst.

Lad os nu se, hvordan vi implementerer disse.

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

Hvis du ser koden, kan du se, at hver gang vi instantierer et objekt, bruger vigetInstance ()metode snarere end at påkalde klassen Bygger .Men det har sine egne ulemper. Hvis du bruger denne metode til at lave en klasse singleton, oprettes der en forekomst uanset om applikationen bruger den eller ej.

Så lad os gå videre og se en anden måde at oprette en singleton-klasse på Java.

2. Lazy Initialization Method

Denne metode kaldes doven initialisering, fordi den udsætter oprettelsen af ​​klasseinstansen til dens første brug. Hvad jeg mener er, at med denne metode oprettes et objekt kun, hvis det er nødvendigt. Det hjælper med at undgå unødvendig oprettelse af . For at designe en singleton-klasse på denne måde skal du følge nedenstående trin:

  1. For det første erklær konstruktøren som privat.
  2. Derefter er du nødt til at oprette en privat statisk forekomst til denne klasse, men det er ikke nødvendigt at instantiere det endnu.
  3. Til sidst skal du oprette en fabriksmetode, der først kontrollerer, om instansmedlemmen er nul eller ej. Hvis ikke, vil det oprette en forekomst af singleton-klassen for dig og returnere den.

Nedenstående kode viser, hvordan du udfører dette.

// Lazy Initialisering offentlig klasse LazySingleton {privat statisk LazySingleton INSTANCE = null privat LazySingleton () {} offentlig statisk LazySingleton getInstance () {hvis (INSTANCE == null) {synkroniseret (LazySingleton.class) {INSTANCE = ny LazySingleton ()}} returner INSTANCE}}

3. Trådsikker singleton Metode

Men ovenstående tilgang kan give anledning til bekymring i de samtidige scenarier. Da singleton mønster hovedsageligt bruges med multi-tråde og hvisflere tråde indtaster if-betingelsen på samme tid, det kan rejse problemer. For at undgå dette prøver vi at oprette en trådsikker singleton-klasse ved at synkronisere den globale adgangsmetode. Dette sikrer, at kun en tråd udfører denne metode til enhver tid. Se nedenstående kode for at se implementeringen:

// Tråd Safe Singleton public class ThreadSafeSingleton {privat statisk ThreadSafeSingleton INSTANCE privat ThreadSafeSingleton () {} offentlig statisk synkroniseret ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()} return INSTANCE}

Men til tider kan denne tilgang også blive meget besværlig som hver gang metodenkaldes på, skal den vente på, at låsen frigøres, før metoden kan bruge den. Dette resulterer i en langsommere proces og fører os til den næste tilgang, der erLazy initialisering med dobbeltlås.

4. Lazy initialisering med dobbeltlås Metode

I denne tilgang synkroniserer vi ikke metoderne. I stedet omslutter vi koden til oprettelse af objekt i en synkroniseret blok.Du kan sige det ved at kontrollere trådlåsen på forhånd, detreducerer antallet af låsekøb. Denne tilgang resulterer normalt i at øge applikationens ydeevne. Tjek nedenstående kode for at se, hvordan det gøres.

// Lazy Initialization with Double Lock public class LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synkroniseret (LazyDoubleLockANCEclassing = net) null) {INSTANCE = ny LazyDoubleLockSingleton ()}}} returner INSTANCE}}

5. Lazy Load Method

Denne metode er baseret på JSL (Java Language Specification) og ifølge denne vil kun indlæse medlemmer af statiske data, når de er påkrævet. Når din singleton-klasse indlæses i JVM, oprettes der således ingen forekomst. Yderligere, under udførelsen af ​​programmet, påberåbes den globale metode i rækkefølge. Med denne metode behøver du ikke eksplicit at synkronisere den statiske getInstance () for at indlæse og initialisere. Det statiske klassemedlem påberåbes på en korrekt sekventeret måde, resten af ​​samtidige påkald af den globale metode returneres i samme rækkefølge uden at udføre synkroniseringsomkostningerne.

Nedenfor er koden til at udføre det samme.

// Lazy Load Method offentlig klasse LazyLoadSingleton {privat LazyLoadSingleton () {} privat statisk klasse SingletonClassHolder {statisk endelig Var INSTANCE = ny LazyLoadSingleton ()} offentlig statisk LazyLoadSingleton getInstance () {return SingletonClassHolder.INANCE}

6. Statisk blokinitialiseringsmetode

Denne metode til oprettelse af en singleton-klasse i Java ersvarer til ivrig initialiseringsmetode. Den eneste forskel er, at forekomsten for denne klasse oprettes inden for den statiske blok have funktionalitet.

// Statisk blokinitialisering offentlig klasse StaticBlockSingleton {privat statisk StaticBlockSingleton INSTANCE privat StaticBlockSingleton () {} // undtagelse af håndtering inden for statisk blok statisk {prøv {INSTANCE = ny StaticBlockSingleton ()} fangst (Undtagelse e) {kast ny RuntimeException ('Undtagelse opstod mens du opretter en Singleton-klasse ')}} offentlig statisk StaticBlockSingleton getInstance () {return INSTANCE}}

Dette bringer os til slutningen af ​​denne artikel om Singleton-klasse i Java. Hvis du vil vide mere om Java, kan du henvise til vores .

Nu hvor du har forstået, hvad der er en Singleton-klasse i Java, skal du tjekke af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-uddannelses- og certificeringskursus er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Spring.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne 'Singleton Class in Java' -artikel, og vi vender tilbage til dig hurtigst muligt.