Singleton Class i Java - Hur använder jag Singleton Class?



Den här artikeln om Singleton Class i Java berättar om de olika sätten på vilka en klass kan göras Singleton tillsammans med praktiska implementeringar.

I Java är en singleton-klass en klass som bara kan ha en instans vid en given tidpunkt. Det är ett av de fem skapande designmönstren i Java som hjälper till att utveckla . Genom denna artikel kommer jag att ge dig tydliga insikter om vad som är en singleton-klass i Java och hur du kan skapa den.

Nedan följer de ämnen som jag kommer att täcka i den här artikeln:





Låt oss börja.

Vad är en Singleton-klass i Java?

I lekman är en Singleton-klass i Java den klass som ger åtkomst till den genom en enda instans i taget. Detta designmönster är för att begränsa onödig instantiering av en klass och se till att endast en existerar när som helst per JVM-instans. Således, med detta mönster, har varje klass som definieras som Singleton bara en enda instansmed en global åtkomstpunkt till den. Till skillnad från normala klasser förstörs inte en singletonklass i slutet av applikationslivscykeln.



Men varför behöver vi en Singleton-klass i första hand?

Tja, genom att begränsa förekomsten av en klass sparar det minnesutrymme eftersom objektet nu inte skapas varje gång en ny begäran görs. Istället kommer ett enda objekt att användas upprepade gånger. Detta är anledningen till att Singleton-mönstret i Java oftast används med och databasapplikationer. Den används i princip för loggning, cachning, trådpooling, konfigurationsinställningar och många fler.

Jag hoppas att du är tydlig med begreppet Singleton-klass i Java. Så, låt oss nu gå vidare i dettaSingleton Class i Java-artikeln och se hur de skapas.



Sätt att utforma en Java Singleton-klass

För att skapa en klass singleton i Java behöver du följande tre saker:

system.exit (0)
  1. statisk medlem i en klass
  2. privat konstruktör
  3. statisk fabriksmetod

Eftersom Java låter utvecklarna utforska sina horisonter finns detett antal sätt att utforma en Singleton-klass. Nedan har jag listat de mest populära.

  1. Ivrig initialiseringsmetod
  2. Lazy Initialization Method
  3. Trådsäker Singleton-metod
  4. Lazy Initialization with Double Lock Method
  5. Lazy Load Method
  6. Initialiseringsmetod för statisk blockering

Låt oss nu dyka djupare in i vart och ett av dessa tillvägagångssätt en efter en.

1. Eager initialiseringsmetod

Detta är den enklaste metoden för att skapa en Singleton-klass där förekomsten skapas vid tidpunkten för klassladdning. För att skapa en singleton-klass med den här metoden måste du följa stegen nedan:

  1. Förklara konstruktören privat.
  2. Nästa steg är att skapa en privat klassmedlem för denna Singleton-klass.
  3. Nu måste du definiera en fabriksmetod som ska användas för att returnera objektet i din klass, som vi har skapat som en instans av klassmedlemmen.
  4. Du kan till och med deklarera en statisk allmänhet om du vill komma åt den här statiska instansen direkt.

Låt oss nu se hur man implementerar dessa.

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

Om du ser koden kan du observera att varje gång vi installerar ett objekt som vi användergetInstance ()metod snarare än att åberopa klassen byggare .Men det har sina egna nackdelar. Om du använder den här metoden för att skapa en klass singleton skulle en instans skapas oavsett om applikationen använder den eller inte.

hur man genererar slumpmässig sträng i Java

Så, låt oss gå vidare och se ett annat sätt att skapa en singleton-klass i Java.

2. Lata initialiseringsmetod

Den här metoden kallas lat initialisering eftersom den skjuter upp skapandet av klassinstansen till dess första användning. Vad jag menar är att med den här metoden skapas ett objekt bara om det behövs. Det hjälper till att undvika onödig skapande av . För att utforma en singleton-klass på detta sätt måste du följa stegen nedan:

  1. Först och främst, förklara konstruktören som privat.
  2. Då måste du skapa en privat statisk instans för den här klassen men du behöver inte starta den ännu.
  3. Slutligen skapar du en fabriksmetod som först kontrollerar om instansmedlemmen är null eller inte. Om inte kommer det att skapa en instans av singleton-klassen för dig och returnera den.

Nedanstående kod visar hur man utför detta.

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

3. Trådsäker singleton Metod

Men ovanstående tillvägagångssätt kan väcka oro i de samtidiga scenarierna. Eftersom singletonmönster huvudsakligen används med flera trådar och ifflera trådar anger if-villkoret samtidigt som det kan ge upphov till problem. För att undvika detta försöker vi skapa en trådsäker singletonklass genom att synkronisera den globala åtkomstmetoden. Detta säkerställer att endast en tråd kör denna metod när som helst. Se nedanstående kod för att 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 ibland kan detta tillvägagångssätt också bli mycket besvärligt som varje gång metodenanropas måste den vänta tills låset släpps innan metoden kan använda det. Detta resulterar i att processen saktar ner och leder oss till nästa tillvägagångssätt som ärLazy Initialization with Double Lock.

4. Lata initialisering med dubbellås Metod

I detta tillvägagångssätt synkroniserar vi inte metoderna. Snarare omsluter vi koden för att skapa objekt i ett synkroniserat block.Du kan säga att genom att kontrollera trådlåsen i förväg, detminskar antalet låsförvärv. Detta tillvägagångssätt leder vanligtvis till att öka prestandan för applikationen. Kolla in koden nedan för att se hur det görs.

// Lazy Initialization with Double Lock public class LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null privat LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synkroniserad (LazyDoubleLockANCE = net) = = null) {INSTANCE = nya LazyDoubleLockSingleton ()}}} returnera INSTANCE}}

5. Lazy Load Method

Denna metod är baserad på JSL (Java Language Specification) och enligt detta kommer att ladda statiska datamedlemmar endast när de krävs. När din singleton-klass laddas till JVM skapas alltså ingen instans. Vidare, under genomförandet av programmet, åberopas den globala metoden i sekventiell ordning. Med den här metoden behöver du inte synkronisera den statiska getInstance () för att ladda och initiera. Den statiska klassmedlemmen kommer att åberopas på ett ordentligt sekvenserat sätt, resten av samtidiga åkallelser av den globala metoden returneras i samma ordning utan att behöva utföra synkroniseringskostnaden.

Nedan är koden för att utföra samma.

// 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. Initialiseringsmetod för statisk blockering

Denna metod för att skapa en singleton-klass i Java ärliknar ivrig initialiseringsmetod. Den enda skillnaden är att instansen för den här klassen skapas inom det statiska blocket som har funktionalitet.

// Statiskt block initialisering offentlig klass StaticBlockSingleton {privat statisk StaticBlockSingleton INSTANCE privat StaticBlockSingleton () {} // undantagshantering inom statisk block statisk {prova {INSTANCE = ny StaticBlockSingleton ()} fångst (undantag e) {kasta ny RuntimeException ('Undantag inträffade medan du skapar en Singleton-klass ')}} offentlig statisk StaticBlockSingleton getInstance () {return INSTANCE}}

Detta leder oss till slutet av den här artikeln om Singleton-klassen i Java. Om du vill veta mer om Java kan du hänvisa till vår .

Nu när du har förstått vad som är en Singleton-klass i Java, kolla in av Edureka, ett pålitligt online-lärande företag med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edurekas Java J2EE- och SOA-utbildning och certifieringskurs är utformad för studenter och yrkesverksamma som vill bli Java-utvecklare. Kursen är utformad för att ge dig ett försprång till Java-programmering och träna dig för både kärn- och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Spring.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i denna “Singleton Class in Java” -artikel så återkommer vi till dig så snart som möjligt.