Heim  >  Artikel  >  Java  >  Singleton-Klasse in Java

Singleton-Klasse in Java

PHPz
PHPzOriginal
2024-08-30 16:00:03791Durchsuche

Die Singleton-Klasse beschränkt die Objekterstellung für eine Klasse auf nur eines in der Java Virtual Machine. Es hilft auch bei der Bereitstellung eines globalen Zugriffspunkts auf das Objekt. Dieses Entwurfsmuster wird häufig für Caching, Abstract Factory, Protokollierung, Prototypen usw. verwendet. Es wird auch in Java-Kernklassen wie java.awt.Desktop und java.lang.Runtime verwendet. In java.lang.Runtime stellt Java eine Klasse Runtime bereit, die die aktuelle Laufzeitumgebung angibt, in der die Anwendung ausgeführt wird. Dies hilft bei der Schnittstelle zwischen der Anwendung und der Laufzeitumgebung. Es sollte ein Objekt vorhanden sein, da die JRE eindeutig ist. In java.awt.Desktop ermöglicht die Klasse Desktop Anwendungen, einen URI oder eine Datei mit dem Standardbrowser, E-Mail-Client usw. des Benutzers zu starten. Auch hier darf es nur eine Instanz der Klasse geben.

Wie funktioniert die Singleton-Klasse in Java?

Singleton-Klassen können auf zwei Arten erstellt werden.

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

  1. Legen Sie den Konstruktor als privat fest, um die Erstellung eines Objekts einzuschränken.
  2. Erstellen Sie eine statische Methode, um eine Instanz des Objekts abzurufen, sodass Sie die Erstellung des Objekts nur innerhalb der Klasse durchführen können.

Sehen wir uns nun das UML-Klassendiagramm (Unified Modeling Language) der Singleton-Klasse an.

Singleton-Klasse in Java

Im Klassen-UML-Diagramm stellt die erste Partition den Namen einer Klasse dar, die zweite Partition stellt die Attribute dar und die dritte Partition stellt die Methoden dar. Außerdem kennzeichnet + öffentliche Attribute oder Methoden und – private Attribute oder Methoden. In unserem UML-Diagramm der Singleton-Klasse lautet der Klassenname beispielsweise Singleton und sie verfügt über eine Hauptmethode. Die Hauptmethode, getInstance-Methode und sampleMethod sind die einzigen Methoden, die im obigen Diagramm öffentlich sind. Konstruktor- und Instanzattribute werden im Rahmen unserer Implementierung als privat festgelegt. Diese öffentliche Main-Methode fragt nach der Instanz und getInstance gibt sie an die Main-Methode zurück.

Basierend auf der Instanziierung besteht der einzige Unterschied zwischen der normalen Java-Klasse und der Singleton-Klasse darin, dass wir in der Java-Klasse einen Konstruktor verwenden, während wir in Singleton die Methode getInstance() verwenden.

Das Designmuster von Singleton hat zwei Formen.

  • Lazy Instantiation: Instanzerstellung bei Bedarf
  • Frühe Instanziierung: Instanzerstellung zur Ladezeit.

1. Faule Instanziierung

Bei Lazy Instantiation wird eine Klasseninstanz erstellt, wenn sie benötigt wird. Es wird in der Synchronized-Methode oder im Synchronized-Block erstellt, um die Race-Conditions zu vermeiden, die in einer Multithread-Umgebung auftreten können.

2. Frühe Instanziierung

Bei der frühen Instanziierung wird zur Ladezeit eine Instanz erstellt. Auch wenn dies der einfachste Ansatz ist, hat er den Nachteil, dass die Instanzerstellung unabhängig davon erfolgt, ob darauf zugegriffen wird oder nicht.

Ein Beispiel für Lazy Instantiation und Early Instantiation wird im folgenden Abschnitt erläutert.

Implementierung der Singleton-Klasse in Java

Wie oben besprochen, kann die Singleton-Klasse in Early Instantiation oder Lazy Instantiation erstellt werden.

Lazy Instantiation

Im Folgenden finden Sie die Schritte zur Implementierung der Lazy Instantiation.

1. Legen Sie den Konstruktor als privat fest.

Zum Beispiel erstellen wir eine Klasse, LazyClass. Der Konstruktor wird wie unten gezeigt aussehen.

private LazyClass ()
{
}

2. Erstellen Sie eine private statische Instanz für die erstellte Klasse.

private static LazyClass instance;

3. Erstellen Sie eine statische synchronisierte Methode, die die Klasseninstanz erstellt.

public static synchronized LazyClass getInstance()
{
}

4. Überprüfen Sie in der Methode getInstance() zunächst, ob eine Instanz vorhanden ist oder nicht. Wenn nicht gefunden, erstellen Sie eines. Andernfalls wird die Instanz zurückgegeben.

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

Lassen Sie uns es nun anhand eines Beispielcodes untersuchen.

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

Ausgabe:

Singleton-Klasse in Java

Anstatt eine Instanz zur Ladezeit zu erstellen, wird sie hier innerhalb des synchronisierten Blocks erstellt. Zum besseren Verständnis wird auch eine Beispielmethode angegeben, die vor der Erstellung mehrerer Objekte geschützt ist.

Frühe Instanziierung

Sehen wir uns nun die Schritte für die frühe Instanziierung an. Es ähnelt der Lazy-Instanziierung, verwendet jedoch keine synchronisierte Methode oder keinen synchronisierten Block.

1. Legen Sie den Konstruktor als privat fest.

Zum Beispiel erstellen wir eine Klasse, EarlyClass. Der Konstruktor wird wie unten gezeigt aussehen.

private EarlyClass () ()
{
}

2. Erstellen Sie eine private statische Instanz für die erstellte Klasse.

private static EarlyClass <em>ins</em>= new EarlyClass();

3. Erstellen Sie eine statische Methode, die die Klasseninstanz erstellt.

public static EarlyClass getInstance()
{
}

Im Folgenden finden Sie den Beispielcode für die frühe Instanziierung.

//Java Program for Early Instantiation
public class EarlyClass {
//Create an instance of the class at load time
private static EarlyClass <em>ins</em>= 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();
}
}

Ausgabe:

Singleton-Klasse in Java

Im obigen Programm wird während der Ladezeit eine Instanz erstellt und mit der Methode getInstance() zurückgegeben. Darüber hinaus wird der Konstruktor im Rahmen der Singleton-Instanziierung als privat festgelegt.

Speichereinsparung ist der Hauptvorteil dieser Verwendung, da ein Objekt wiederverwendet und nicht immer wieder erstellt wird.

Fazit

In diesem Dokument haben wir erläutert, wie eine Singleton-Klasse mithilfe eines Klassen-UML-Diagramms, eines Algorithmus und eines Beispielcodes funktioniert. Die Singleton-Klasse wird verwendet, wenn wir nur ein Objekt für eine Klasse und einen globalen Zugriffspunkt auf dieses Objekt benötigen. Die beiden Formen, wie z. B. frühe Instanziierung und verzögerte Instanziierung, können je nach Anforderung verwendet werden.

Das obige ist der detaillierte Inhalt vonSingleton-Klasse in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Kapselung in JavaNächster Artikel:Kapselung in Java