Sobes.tech
Junior

Co je to vzorec Singleton?

sobes.tech AI

Odpověď od AI

Singleton je návrhový vzor vytvárania, ktorý zaručuje, že trieda má iba jeden inštanciu a poskytuje globálny prístupový bod k tejto inštancii. Používa sa, keď je potrebný jeden objekt na správu spoločného zdroja alebo stavu.

Princíp fungovania:

  1. Súkromný konštruktor, ktorý zakazuje vytváranie nových inštancií pomocou new.
  2. Súkromné statické pole na uloženie jedinej inštancie.
  3. Verejná statická metóda, ktorá poskytuje prístup k inštancii:
    • Kontroluje, či bola inštancia vytvorená.
    • Ak nie, vytvorí ju a uloží do statického poľa.
    • Vráti vytvorenú alebo existujúcu inštanciu.

Príklad v Jave:

public class Singleton {
    // Súkromné statické pole na uloženie inštancie
    private static Singleton instance;

    // Súkromný konštruktor
    private Singleton() {
        // Inicializácia, ak je potrebná
    }

    // Verejná statická metóda na získanie inštancie
    public static Singleton getInstance() {
        // Kontrola na null pre lazy inicializáciu
        if (instance == null) {
            // Synchronizácia pre bezpečnosť v multithread prostredí
            synchronized (Singleton.class) {
                // Dvojitá kontrola
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // Biznis logika singletonu
    public void doSomething() {
        System.out.println("Singleton inštancia niečo robí.");
    }
}

Použitie v QA Automatizácii:

  • Riadenie konfigurácií testov (súbory vlastností, premenné prostredia).
  • Jediná inštancia ovládača prehliadača (WebDriver), ak všetky testy používajú ten istý ovládač.
  • Manažér logov alebo správ.
  • Pool spojení s databázou.

Výhody:

  • Zaručuje, že existuje iba jedna inštancia.
  • Poskytuje pohodlný prístupový bod k inštancii.
  • Lazy inicializácia (je vytvorená iba pri prvej požiadavke).

Nevýhody:

  • Môže skrývať závislosti.
  • Znižuje testovateľnosť jednotiek, pretože singleton je globálny stav.
  • Porušuje princíp jednotnej zodpovednosti (trieda môže byť zodpovedná za svoju logiku a správu životného cyklu).
  • Môžu nastať problémy s viacvláknovým spracovaním, ak nie je správne implementovaný.