Introduktion til Singleton Class i Java

Singleton-klassen begrænser objektskabelsen for en klasse til kun en i den virtuelle java-maskine. Det hjælper også med at levere et globalt adgangspunkt til objektet. Dette designmønster bruges ofte i cache, abstrakt fabrik, logning, prototype osv. Det bruges også i centrale java klasser som java.awt.Desktop, java.lang.Runtime. I java.lang.Runtime giver Java en klasse Runtime, der angiver det aktuelle Runtime-miljø, hvor applikationen kører. Dette hjælper med at blande applikationen og runtime-miljøet. Der skal være et objekt, da JRE er unik. I java.awt.Desktop tillader klasse Desktop, applikationer at starte en URI eller en fil med standardbrowser for brugeren, mailklienten osv. Også her skal der kun være én forekomst af klassen.

Sådan fungerer Singleton Class i Java

Singleton Class kan oprettes på to måder.

  1. Indstil konstruktøren som privat for at begrænse oprettelsen af ​​et objekt.
  2. Opret en statisk metode for at få et eksempel på objektet, så du kun kan håndtere oprettelsen af ​​objekt inde i klassen.

Lad os nu se Class UML (Unified Modelling Language) diagram over Singleton Class.

I UML-diagrammet repræsenterer den første partition navnet på en klasse, den anden partition repræsenterer attributterne, og den tredje partition repræsenterer metoderne. + Angiver også offentlige attributter eller metoder og - angiver private attributter eller metoder. I vores Singleton Class UML-diagram er klassens navn Singleton og det har en hovedmetode. Hovedmetode, getInstance-metode og sampleMethod er de eneste metoder, der er offentlige i ovenstående diagram. Konstruktør og instansattributten er indstillet som privat som en del af vores implementering. Denne offentlige hovedmetode beder om forekomsten og getInstance returnerer den til hovedmetoden.

Baseret på Instantiation er den eneste forskel mellem normal Java Class og Singleton Class, at vi vil bruge en konstruktør i Java Class, hvorimod vi i Singleton bruger getInstance () -metoden.

Singleton designmønster er af to former.

  • Lazy Instantiation: Oprettelse af tilfælde, når det kræves
  • Tidlig instantiation: Oprettelse af instanser på belastningstid.

1. Lazy Instantiation

I Lazy Instantiation oprettes en klasseinstans, når det er påkrævet. Det oprettes i den synkroniserede metode eller blok for at undgå løbebetingelser, der kan forekomme i et flertrådet miljø.

2. Tidlig instantiation

I Early Instantiation oprettes en instans på indlæsningstidspunktet. Selvom dette er den mest enkle tilgang, har det en ulempe, at oprettelsen af ​​instanser er uanset om det er adgang til eller ikke.

Et eksempel på Lazy Instantiation og Early Instantiation er forklaret i det følgende afsnit.

Implementering af Singleton Class i Java

Som diskuteret ovenfor kan Singleton Class oprettes i Early Instantiation eller Lazy Instantiation.

Lazy Instantiation

Følgende er trinnene til implementering af Lazy Instantiation

1. Indstil Constructor som privat.

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

private LazyClass ()
(
)

2. Opret en privat statisk forekomst til den oprettede klasse.

private static LazyClass instance;

3. Opret en statisk synkroniseret metode, der får klassens instans oprettet.

public static synchronized LazyClass getInstance()
(
)

4. I metoden getInstance () skal du først kontrollere, om der findes en forekomst eller ej. Hvis det ikke findes, skal du oprette en. Ellers returnerer instansen.

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

Lad os nu undersøge det ved hjælp af prøvekode.

//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();
)
)

Produktion:

I stedet for at oprette en instans på indlæsningstid oprettes her inden i den synkroniserede blok. For bedre forståelse gives der også en prøvemetode, der er beskyttet mod mere end en objektskabelse.

Tidlig instantiation

Lad os nu se trinnene til Early Instantiation. Det ligner Lazy instantiation, bortset fra at den ikke bruger nogen synkroniseret metode eller blok.

1. Indstil Constructor som privat.

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

private EarlyClass () ()
(
)

2. Opret en privat statisk forekomst til den oprettede klasse.

private static EarlyClass ins = new EarlyClass();

3. Opret en statisk metode, der får klassens instans oprettet.

public static EarlyClass getInstance()
(
)

Følgende er prøvekoden til 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();
)
)

Produktion:

I ovenstående program oprettes en instans i belastningstid, og den returneres ved hjælp af metoden getInstance (). Derudover er Constructor indstillet som privat som en del af singleton instantiation.

Hukommelsesbesparelse er den største fordel ved at bruge dette, da et objekt genbruges og ikke oprettes igen og igen.

Konklusion

I dette dokument har vi dækket, hvordan en Singleton Class fungerer ved hjælp af klasse UML-diagram, algoritme og prøvekode. Singleton Class bruges, når vi kun har brug for et objekt til en klasse og et globalt adgangspunkt til det objekt. De to former såsom Early instantiation og Lazy Instantiation kan bruges på baggrund af kravet.

Anbefalede artikler

Dette er en guide til Singleton Class i Java. Her diskuterer vi, hvordan singleton-klassen fungerer i java sammen med implementering, der inkluderer doven øjeblikkelægning og tidlig øjeblikkelig igangsætning. Du kan også gennemgå vores andre foreslåede artikler for at lære mere -

  1. Hvad er designmønster i Java?
  2. Abstrakt klasse i Java
  3. Java-kommentarer
  4. BorderLayout i Java
  5. JRE vs JVM | Top 8 forskelle med (Infographics)
  6. Hvordan man arbejder statisk metode i JavaScript?

Kategori: