Introduktion till Singleton Class i Java

Singleton-klass begränsar objektskapningen för en klass till endast en i den java virtuella maskinen. Det hjälper också till att tillhandahålla en global åtkomstpunkt till objektet. Detta designmönster används vanligtvis i caching, abstrakt fabrik, loggning, prototyp, etc. Det används också i kärn-java-klasser som java.awt.Desktop, java.lang.Runtime. I java.lang.Runtime tillhandahåller Java en klass Runtime som anger den aktuella Runtime-miljön där applikationen körs. Detta hjälper till att gränssnitta applikationen och runtime-miljön. Det bör finnas ett objekt eftersom JRE är unik. I java.awt.Desktop tillåter klass Desktop att applikationer startar en URI eller en fil med standardwebbläsaren för användaren, e-postklienten, etc. Även här måste det bara finnas en instans av klassen.

Hur Singleton Class fungerar i Java

Singleton Class kan skapas på två sätt.

  1. Ställ in konstruktören som privat för att begränsa skapandet av ett objekt.
  2. Skapa en statisk metod för att få en instans av objektet, så att du bara kan hantera skapandet av objekt i klassen.

Låt oss nu se klass UML (Unified Modelling Language) -diagrammet för Singleton Class.

I klass UML-diagram representerar den första partitionen namnet på en klass, den andra partitionen representerar attributen och den tredje partitionen representerar metoderna. Dessutom anger + offentliga attribut eller metoder och - indikerar privata attribut eller metoder. I vårt UML-diagram för Singleton Class är klassnamnet Singleton och det har en huvudmetod. Huvudmetod, getInstance Method och sampleMethod är de enda metoderna som är offentliga i diagrammet ovan. Konstruktör- och instansattribut är inställt som privat som en del av vår implementering. Den här offentliga huvudmetoden ber om instansen och getInstance returnerar den till huvudmetoden.

Baserat på Instantiation är den enda skillnaden mellan normal Java Class och Singleton Class att vi kommer att använda en konstruktör i Java Class medan vi i Singleton använder metoden getInstance ().

Singleton designmönster är av två former.

  • Lazy Instantiation: Skapa instans vid behov
  • Early Instantiation: Instans skapande vid laddningstid.

1. Lazy Instantiation

I Lazy Instantiation skapas en klassinstans när det krävs. Det skapas i den synkroniserade metoden eller blocket för att undvika tävlingsförhållandena som kan uppstå i en multigängad miljö.

2. Tidig instantiation

I tidig instans skapas en instans vid laddningstiden. Även om detta är det enklaste tillvägagångssättet, har det en nackdel att instansen skapas oavsett om den har åtkomst eller inte.

Ett exempel på Lazy Instantiation och Early Instantiation förklaras i följande avsnitt.

Implementering av Singleton Class i Java

Som diskuterats ovan kan Singleton Class skapas i Early Instantiation eller Lazy Instantiation.

Lazy Instantiation

Följande är stegen för att implementera Lazy Instantiation

1. Ställ Constructor som privat.

Till exempel skapar vi en klass LazyClass. Konstruktören kommer att visas som nedan.

private LazyClass ()
(
)

2. Skapa en privat statisk instans för den skapade klassen.

private static LazyClass instance;

3. Skapa en statisk synkroniserad metod som skapar klassinstansen.

public static synchronized LazyClass getInstance()
(
)

4. Kontrollera först i metoden getInstance () om någon instans finns eller inte. Om den inte hittas, skapa en. Annars returnerar instansen.

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

Låt oss nu undersöka det med exempelkod.

//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 stället för att skapa en instans vid laddningstid skapas den i det synkroniserade blocket. För bättre förståelse ges också ett exempel på en metod som är skyddad från mer än ett objekt skapande.

Tidig instantiation

Låt oss nu se stegen för tidig instantiering. Det liknar Lazy instantiation, förutom att det inte använder någon synkroniserad metod eller block.

1. Ställ Constructor som privat.

Till exempel skapar vi en klass EarlyClass. Konstruktören kommer att visas som nedan.

private EarlyClass () ()
(
)

2. Skapa en privat statisk instans för den skapade klassen.

private static EarlyClass ins = new EarlyClass();

3. Skapa en statisk metod som skapar klassinstansen.

public static EarlyClass getInstance()
(
)

Följande är provkoden för 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 ovanstående program skapas en instans i lasttid och den returneras med metoden getInstance (). Dessutom är Constructor inställd som privat som en del av singleton instantiation.

Minnesbesparing är den största fördelen med att använda detta eftersom ett objekt återanvänds och inte skapas om och om igen.

Slutsats

I det här dokumentet har vi täckt hur en Singleton Class fungerar med hjälp av klass UML-diagram, algoritm och provkod. Singleton Class används när vi bara behöver ett objekt för en klass och en global åtkomstpunkt till det objektet. De två formerna som Early instantiation och Lazy Instantiation kan användas baserat på kravet.

Rekommenderade artiklar

Detta är en guide till Singleton Class i Java. Här diskuterar vi hur singleton-klassen fungerar i java tillsammans med implementering som inkluderar lat instans och tidig instans. Du kan också gå igenom våra andra föreslagna artiklar för att lära dig mer -

  1. Vad är designmönster i Java?
  2. Abstrakt klass i Java
  3. Java-kommentarer
  4. BorderLayout i Java
  5. JRE vs JVM | Topp 8 skillnader med (Infographics)
  6. Hur man arbetar med statisk metod i JavaScript?

Kategori: