Sobes.tech
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:

  1. Privater Konstruktor, um die Erstellung neuer Instanzen mit new zu verbieten.
  2. Privates statisches Feld zur Speicherung der einzigen Instanz.
  3. Ö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.