Junior
Was ist das Singleton-Muster?
sobes.tech KI
Antwort von AI
Singleton ist ein Erzeugungsmuster, das garantiert, dass eine Klasse nur eine Instanz hat, und bietet einen globalen Zugriffspunkt auf diese Instanz. Es wird verwendet, wenn ein einzelnes Objekt zur Verwaltung einer gemeinsamen Ressource oder eines Zustands benötigt wird.
Funktionsprinzip:
- Privater Konstruktor, um die Erstellung neuer Instanzen mit
newzu verbieten. - Privates statisches Feld zur Speicherung der einzigen Instanz.
- Öffentliches statisches Methode, die Zugriff auf die Instanz bietet:
- Überprüft, ob die Instanz erstellt wurde.
- Falls nicht, erstellt sie und speichert sie im statischen Feld.
- Gibt die erstellte oder vorhandene Instanz zurück.
Beispiel in Java:
public class Singleton {
// Privates statisches Feld zur Speicherung der Instanz
private static Singleton instance;
// Privater Konstruktor
private Singleton() {
// Initialisierung, falls erforderlich
}
// Öffentliches statisches Methode zum Erhalten der Instanz
public static Singleton getInstance() {
// Null-Prüfung für lazy Initialisierung
if (instance == null) {
// Synchronisation für Thread-Sicherheit
synchronized (Singleton.class) {
// Double-Checked Locking
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// Business-Logik des Singletons
public void doSomething() {
System.out.println("Singleton instance is doing something.");
}
}
Anwendung in QA Automation:
- Verwaltung der Testkonfigurationen (Eigenschaftsdateien, Umgebungsvariablen).
- Einzigartige Instanz des Browser-Treibers (WebDriver), wenn alle Tests denselben Treiber verwenden.
- Log- oder Berichtmanager.
- Verbindungspool zur Datenbank.
Vorteile:
- Garantiert, dass nur eine Instanz vorhanden ist.
- Bietet einen bequemen Zugriffspunkt auf die Instanz.
- Lazy-Initialisierung (erst bei der ersten Anforderung erstellt).
Nachteile:
- Kann Abhängigkeiten verbergen.
- Erschwert das Unit-Testing, da der Singleton ein globaler Zustand ist.
- Verletzung des Prinzips der einzigen Verantwortung (die Klasse kann für ihre Logik und das Lifecycle-Management verantwortlich sein).
- Es können Probleme mit der Multithread-Sicherheit auftreten, wenn es nicht richtig implementiert wird.