Sobes.tech
Junior

Wat is het Singleton-patroon?

sobes.tech AI

Antwoord van AI

Singleton is een creational design pattern dat garandeert dat een klasse slechts één instantie heeft en een globaal toegangspunt tot die instantie biedt. Het wordt toegepast wanneer er een enkel object nodig is om een gedeelde bron of toestand te beheren.

Werking principe:

  1. Privé constructor om het maken van nieuwe instanties met new te verbieden.
  2. Privé statisch veld om de enige instantie op te slaan.
  3. Publieke statische methode die toegang tot de instantie biedt:
    • Controleert of de instantie is gemaakt.
    • Zo niet, maakt het en slaat het op in het statische veld.
    • Retourneert de gemaakte of bestaande instantie.

Voorbeeld in Java:

public class Singleton {
    // Privé statisch veld voor het opslaan van de instantie
    private static Singleton instance;

    // Privé constructor
    private Singleton() {
        // Initialisatie indien nodig
    }

    // Publieke statische methode om de instantie te krijgen
    public static Singleton getInstance() {
        // Null-check voor lazy initialisatie
        if (instance == null) {
            // Synchronisatie voor threadveiligheid
            synchronized (Singleton.class) {
                // Double-checked locking
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // Businesslogica van singleton
    public void doSomething() {
        System.out.println("Singleton instance is doing something.");
    }
}

Toepassing in QA Automation:

  • Beheer van testconfiguraties (eigenschapsbestanden, omgevingsvariabelen).
  • Enkele instantie van de browserdriver (WebDriver) wanneer alle tests dezelfde driver gebruiken.
  • Log- of rapportagemanager.
  • Pool van verbindingen met de database.

Voordelen:

  • Garandeert dat slechts één instantie bestaat.
  • Biedt een handig toegangspunt tot de instantie.
  • Lazy initialisatie (wordt alleen bij de eerste aanvraag gemaakt).

Nadelen:

  • Kan afhankelijkheden verbergen.
  • Maakt unit testing moeilijker omdat singleton een globale toestand is.
  • Schendt het principe van enkele verantwoordelijkheid (de klasse kan verantwoordelijk zijn voor haar logica en levenscyclusbeheer).
  • Problemen met multithreading kunnen ontstaan als het niet correct wordt geïmplementeerd.