Sobes.tech
Junior

Czym jest wzorzec Singleton?

sobes.tech AI

Odpowiedź od AI

Singleton to wzorzec kreacyjny, który gwarantuje, że klasa ma tylko jedną instancję i zapewnia globalny punkt dostępu do tej instancji. Stosuje się go, gdy potrzebny jest pojedynczy obiekt do zarządzania wspólnym zasobem lub stanem.

Zasada działania:

  1. Prywatny konstruktor, aby uniemożliwić tworzenie nowych instancji za pomocą new.
  2. Prywatne statyczne pole do przechowywania pojedynczej instancji.
  3. Publiczna statyczna metoda, która zapewnia dostęp do instancji:
    • Sprawdza, czy instancja została utworzona.
    • Jeśli nie, tworzy ją i zapisuje w statycznym polu.
    • Zwraca utworzoną lub istniejącą instancję.

Przykład w Java:

public class Singleton {
    // Prywatne statyczne pole do przechowywania instancji
    private static Singleton instance;

    // Prywatny konstruktor
    private Singleton() {
        // Inicjalizacja, jeśli jest potrzebna
    }

    // Publiczna statyczna metoda do uzyskania instancji
    public static Singleton getInstance() {
        // Sprawdzenie na null dla leniwej inicjalizacji
        if (instance == null) {
            // Synchronizacja dla bezpieczeństwa w wielowątkowym środowisku
            synchronized (Singleton.class) {
                // Podwójne sprawdzenie w zablokowanym bloku
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // Logika biznesowa singletona
    public void doSomething() {
        System.out.println("Singleton instance is doing something.");
    }
}

Zastosowanie w QA Automation:

  • Zarządzanie konfiguracją testów (pliki właściwości, zmienne środowiskowe).
  • Pojedynczy egzemplarz sterownika przeglądarki (WebDriver), gdy wszystkie testy korzystają z tego samego sterownika.
  • Menedżer logów lub raportów.
  • Pool połączeń z bazą danych.

Zalety:

  • Gwarantuje, że istnieje tylko jedna instancja.
  • Zapewnia wygodny punkt dostępu do instancji.
  • Leniona inicjalizacja (tworzona tylko przy pierwszym żądaniu).

Wady:

  • Może ukrywać zależności.
  • Utrudnia testowanie jednostkowe, ponieważ singleton to stan globalny.
  • Narusza zasadę pojedynczej odpowiedzialności (klasa może być odpowiedzialna za własną logikę i zarządzanie cyklem życia).
  • Mogą wystąpić problemy z wielowątkowością, jeśli nie zostanie poprawnie zaimplementowany.