Introduksjon til Singleton Class i Java

Singleton-klassen begrenser objektskapingen for en klasse til bare en i den virtuelle java-maskinen. Det hjelper også med å gi et globalt tilgangspunkt til objektet. Dette designmønsteret blir ofte brukt i hurtigbufring, Abstract Factory, logging, Prototype, etc. Det brukes også i kjernen java klasser som java.awt.Desktop, java.lang.Runtime. I java.lang.Runtime gir Java en klasse Runtime som betyr det gjeldende Runtime-miljøet der applikasjonen kjører. Dette hjelper med å grensesnitt applikasjonen og runtime-miljøet. Det bør være ett objekt ettersom JRE er unik. I java.awt.Desktop, lar Class Desktop applikasjoner starte en URI eller en fil med standard nettleser for brukeren, e-postklienten, etc. Også her må det bare være en forekomst av klassen.

Slik fungerer Singleton Class i Java

Singleton Class kan opprettes på to måter.

  1. Still konstruktøren som privat for å begrense opprettelsen av et objekt.
  2. Lag en statisk metode for å få en forekomst av objektet, slik at du bare kan håndtere opprettelsen av objekt i klassen.

La oss nå se Class UML (Unified Modelling Language) diagram for Singleton Class.

I UML-diagrammet representerer den første partisjonen navnet på en klasse, den andre partisjonen representerer attributtene og den tredje partisjonen representerer metodene. + Angir også offentlige attributter eller metoder og - indikerer private attributter eller metoder. I UML-skjemaet for Singleton Class er klassens navn Singleton, og det har en hovedmetode. Hovedmetode, getInstance Method og sampleMethod er de eneste metodene som er offentlige i diagrammet ovenfor. Konstruktør og instansattributt er satt som privat som en del av implementeringen vår. Denne offentlige hovedmetoden ber om forekomsten og getInstance returnerer den til hovedmetoden.

Basert på Instantiation er den eneste forskjellen mellom normal Java Class og Singleton Class at vi vil bruke en konstruktør i Java Class, mens vi i Singleton bruker getInstance () -metoden.

Singleton designmønster er av to former.

  • Lazy Instantiation: Opprettelse av forekomster når det er nødvendig
  • Tidlig instantiation: Opprettelse av forekomster på lastetid.

1. Lat Instantiation

I Lazy Instantiation opprettes en klasseinstans når det kreves. Det opprettes i synkronisert metode eller blokk for å unngå løpsbetingelsene som kan oppstå i et flertrådet miljø.

2. Tidlig institusjon

I Early Instantiation opprettes en instans på lastetidspunktet. Selv om dette er den enkleste tilnærmingen, har det en ulempe at opprettelsen av instanser er uavhengig av om den er tilgang til eller ikke.

Et eksempel på Lazy Instantiation og Early Instantiation er forklart i følgende avsnitt.

Implementering av Singleton Class i Java

Som diskutert ovenfor, kan Singleton Class opprettes i Early Instantiation eller Lazy Instantiation.

Lat Instantiation

Følgende er trinnene for å implementere Lazy Instantiation

1. Still Constructor som privat.

For eksempel lager vi en klasse LazyClass. Konstruktøren vil være som vist nedenfor.

private LazyClass ()
(
)

2. Opprett en privat statisk forekomst for klassen som ble opprettet.

private static LazyClass instance;

3. Lag en statisk synkronisert metode som får klasseforekomsten opprettet.

public static synchronized LazyClass getInstance()
(
)

4. I getInstance-metoden må du først sjekke om noen forekomst er til stede eller ikke. Hvis ikke, opprett en. Ellers returnerer forekomsten.

if(instance == null)
(
instance = new LazyClass ();
)
return instance;

La oss se nærmere på den ved å bruke eksempelskode.

//Java Program for Lazy Instantiation
public class LazyClass (
private static LazyClass instance;
//set the constructor as private
private LazyClass () ()
//Checks whether an instance is already in the getInstance method
public static synchronized LazyClass getInstance() (
//if instance is not present already, create a new one
if(instance == null) (
instance = new LazyClass ();
)
// if an instance is present, then return it
return instance;
)
//Sample method that is protected from more than one object creation
public void sampleMethod( ) (
System.out.println("sampleMethod for lazy singleton");
)
public static void main(String() args) (
LazyClass temp=LazyClass.getInstance();
temp.sampleMethod();
)
)

Produksjon:

Her, i stedet for å opprette en forekomst på lastetid, opprettes den i den synkroniserte blokken. For bedre forståelse gis det også en eksempelmetode som er beskyttet mot mer enn ett objektoppretting.

Tidlig institusjon

La oss nå se trinnene for Early Instantiation. Det ligner på Lazy instantiation, bortsett fra at den ikke bruker noen synkronisert metode eller blokk.

1. Still Constructor som privat.

For eksempel lager vi en klasse EarlyClass. Konstruktøren vil være som vist nedenfor.

private EarlyClass () ()
(
)

2. Opprett en privat statisk forekomst for klassen som ble opprettet.

private static EarlyClass ins = new EarlyClass();

3. Lag en statisk metode som får klasseforekomsten opprettet.

public static EarlyClass getInstance()
(
)

Følgende er prøvekoden for Early Instantiation.

//Java Program for Early Instantiation
public class EarlyClass (
//Create an instance of the class at load time
private static EarlyClass ins = new EarlyClass();
//set the constructor as private
private EarlyClass () ()
//A static method to get the instance
public static EarlyClass getInstance() (
return ins ;
)
//A sample method that is protected from more than one object creation
public void sampleMethod() (
System. out .println("sampleMethod for Early singleton");
)
//Main method
public static void main(String() args) (
EarlyClass tmp = getInstance ();
tmp.sampleMethod();
)
)

Produksjon:

I ovennevnte program opprettes en forekomst i lastetid og returneres ved hjelp av metoden getInstance (). I tillegg er Constructor satt som privat som en del av singleton instantiation.

Minnebesparelse er den største fordelen ved å bruke dette ettersom gjenbruk gjenbrukes og ikke opprettes igjen og igjen.

Konklusjon

I dette dokumentet har vi dekket hvordan en Singleton Class fungerer ved hjelp av Class UML-diagram, algoritme og prøvekode. Singleton Class brukes når vi bare trenger ett objekt for en klasse og et globalt tilgangspunkt til det objektet. De to formene som Early instantiation og Lazy Instantiation kan brukes basert på kravet.

Anbefalte artikler

Dette er en guide til Singleton Class i Java. Her diskuterer vi hvordan singleton-klassen fungerer i java sammen med implementering som inkluderer lat instinering og tidlig instinering. Du kan også gå gjennom andre foreslåtte artikler for å lære mer -

  1. Hva er designmønster i Java?
  2. Abstrakt klasse i Java
  3. Java-merknader
  4. BorderLayout i Java
  5. JRE vs JVM | Topp 8 forskjeller med (Infographics)
  6. Hvordan arbeide statisk metode i JavaScript?