Singleton Class i Java - Hvordan bruke Singleton Class?



Denne artikkelen om Singleton Class i Java snakker om de forskjellige måtene som en klasse kan gjøres Singleton sammen med praktiske implementeringer.

I Java er en singleton-klasse en klasse som bare kan ha en forekomst på et gitt tidspunkt. Det er et av de fem Creational Design-mønstrene i Java som hjelper til enkel utvikling av . Gjennom mediet i denne artikkelen vil jeg gi deg klar innsikt i hva som er en singleton-klasse i Java og hvordan du kan lage den.

Nedenfor er emnene jeg skal dekke i denne artikkelen:





La oss komme i gang.

Hva er en Singleton-klasse i Java?

I lekmannstilstand er en Singleton-klasse i Java klassen som gir tilgang til den gjennom en enkelt forekomst om gangen. Dette designmønsteret er for å begrense unødvendig instantiering av en klasse og sikre at bare en eksisterer når som helst per JVM-forekomst. Således, med dette mønsteret, har enhver klasse som er definert som Singleton bare en enkelt forekomstmed et globalt tilgangspunkt til det. I motsetning til normale klasser blir ikke en singleton-klasse ødelagt ved slutten av applikasjonens livssyklus.



hvordan du installerer php på vinduet

Men hvorfor trenger vi i utgangspunktet en Singleton-klasse?

Vel, ved å begrense forekomstopprettelsen av en klasse sparer det minneplass, ettersom objektet nå ikke blir opprettet hver gang en ny forespørsel blir gjort. I stedet vil et enkelt objekt brukes gjentatte ganger. Dette er grunnen til at Singleton-mønsteret i Java mest brukes med og databaseapplikasjoner. Den brukes i utgangspunktet til logging, caching, thread pooling, konfigurasjonsinnstillinger og mange flere.

Jeg håper du er klar med begrepet Singleton-klasse i Java. Så, la oss nå gå videre i detteSingleton Class in Java artikkel og se hvordan de blir opprettet.



Måter å designe en Java Singleton-klasse

For å lage en klassesingleton i Java trenger du følgende tre ting:

  1. statisk medlem av en klasse
  2. privat konstruktør
  3. statisk fabrikkmetode

Siden Java lar utviklerne utforske sine horisonter, er det deten rekke måter du kan designe en Singleton-klasse på. Nedenfor har jeg listet opp de mest populære.

implementering av hashmap i Java-kode
  1. Ivrig initialiseringsmetode
  2. Lat initialiseringsmetode
  3. Trådsikker Singleton-metode
  4. Lat initialisering med Double Lock Method
  5. Lazy Load Method
  6. Initialiseringsmetode for statisk blokk

La oss nå dykke dypere ned i hver av disse tilnærmingene en etter en.

1. Ivrig initialiseringsmetode

Dette er den enkleste metoden for å lage en Singleton-klasse der forekomsten opprettes på tidspunktet for klasseinnlasting. For å opprette en singleton-klasse ved hjelp av denne metoden, må du følge trinnene nedenfor:

  1. Erklær konstruktøren privat.
  2. Neste trinn er å opprette et privat klassemedlem for denne Singleton-klassen.
  3. Nå må du definere en fabrikkmetode som skal brukes til å returnere objektet til klassen din, som vi har opprettet som en forekomst av klassemedlemmet.
  4. Du kan til og med erklære at et statisk medlem er offentlig hvis du vil ha direkte tilgang til denne statiske forekomsten.

La oss nå 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 observere at hver gang vi starter et objekt vi brukergetInstance ()metode i stedet for å påkalle klassen bygger .Men det har sine egne ulemper. Hvis du bruker denne metoden for å lage en klasse singleton, vil en forekomst opprettes uavhengig av om applikasjonen bruker den eller ikke.

Så la oss gå videre og se en annen måte å lage en singleton-klasse på Java.

2. Lat initialiseringsmetode

Denne metoden kalles lat initialisering fordi den utsetter opprettelsen av klasseinstansen til den første gangen den brukes. Det jeg mener er at med denne metoden blir et objekt opprettet bare hvis det er nødvendig. Det hjelper med å unngå unødvendig opprettelse av . For å designe en singleton-klasse på denne måten, må du følge trinnene nedenfor:

  1. Først av alt, erklære konstruktøren som privat.
  2. Da må du opprette en privat statisk forekomst for denne klassen, men du trenger ikke å instantiere den ennå.
  3. Til slutt oppretter du en fabrikkmetode som først vil sjekke om forekomstmedlemmet er null eller ikke. Hvis ikke, vil det opprette en forekomst av singleton-klassen for deg og returnere den.

Koden nedenfor viser hvordan du utfører dette.

// Lazy Initialization public class LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySingleton ()}} returner INSTANCE}}

3. Trådsikker Singleton Metode

Men den ovennevnte tilnærmingen kan gi noen bekymringer i de samtidige scenariene. Siden singleton mønster hovedsakelig brukes med flere tråder og hvisflere tråder går inn i if-tilstanden samtidig, det kan gi problemer. For å unngå dette prøver vi å lage en trådsikker singleton-klasse ved å synkronisere den globale tilgangsmetoden. Dette sikrer at bare en tråd utfører denne metoden når som helst. Se koden nedenfor for å se implementeringen:

// Thread Safe Singleton public class ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} public static synchronized ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()} return INSTANCE}

Men til tider kan denne tilnærmingen også bli veldig tungvint som hver gang metodenblir påkalt må den vente på at låsen frigjøres før metoden kan bruke den. Dette resulterer i at prosessen bremses og fører oss til neste tilnærmingLat initialisering med dobbeltlås.

4. Lat initialisering med dobbeltlås Metode

I denne tilnærmingen synkroniserer vi ikke metodene. Snarere innhyller vi koden for oppretting av objekt i en synkronisert blokk.Du kan si at ved å sjekke trådlåsene på forhånd, detreduserer antall låseanskaffelser. Denne tilnærmingen resulterer vanligvis i å øke ytelsen til applikasjonen. Sjekk koden nedenfor for å se hvordan det gjøres.

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

5. Lazy Load Method

Denne metoden er basert på JSL (Java Language Specification) og i henhold til dette vil bare laste inn statiske data når de er påkrevd. Dermed når din singleton-klasse er lastet inn i JVM, opprettes ingen forekomst. Videre, under gjennomføringen av programmet, blir den globale metoden påkalt i sekvensiell rekkefølge. Med denne metoden trenger du ikke å synkronisere den statiske getInstance () eksplisitt for å laste og initialisere. Det statiske klassemedlemmet vil bli påkalt på en ordentlig sekvensert måte, resten av samtidige påkallelser av den globale metoden returneres i samme rekkefølge uten å måtte utføre synkroniseringsomkostningene.

Nedenfor er koden for å utføre det samme.

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

6. Statisk blokk initialiseringsmetode

Denne metoden for å lage en singleton-klasse i Java erligner på ivrig initialiseringsmetode. Den eneste forskjellen er at forekomsten for denne klassen er opprettet i den statiske blokkeringen funksjonalitet.

// Static Block Initialization public class StaticBlockSingleton {private static StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // unntakshåndtering innenfor statisk block static {try {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {throw new RuntimeException ('Exception occured mens du oppretter en Singleton-klasse ')}} offentlig statisk StaticBlockSingleton getInstance () {return INSTANCE}}

Dette bringer oss til slutten av denne artikkelen om Singleton-klassen i Java. Hvis du vil vite mer om Java, kan du henvise til vår .

Nå som du har forstått hva som er en Singleton-klasse i Java, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

tett kobling vs løs kobling

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'Singleton Class in Java' -artikkelen, så kommer vi tilbake til deg så snart som mulig.