Sobes.tech
Junior

Čo je to vzorec Singleton?

sobes.tech AI

Odpoveď od AI

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

Princíp práce:

  1. Súkromný konštruktor, aby sa zakázalo vytváranie nových inštancií pomocou new.
  2. Súkromné statické pole na uloženie jediného inštancie.
  3. Verejná statická metóda, ktorá poskytuje prístup k inštancii:
    • Kontroluje, či je 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 lenivú inicializáciu
        if (instance == null) {
            // Synchronizácia pre bezpečnosť v multi-thread prostredí
            synchronized (Singleton.class) {
                // Opätovná kontrola na null vnútri synchronizovaného bloku (Double-Checked Locking)
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // Biznis logika singletonu
    public void doSomething() {
        System.out.println("Singleton instance is doing something.");
    }
}

Použitie v QA Automation:

  • Riadenie nastavení konfigurácie testov (súbory vlastností, premenné prostredia).
  • Jediný inštancia WebDrivera pre prehliadač.
  • 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.
  • Lenivá inicializácia (vytvára sa až pri prvom požiadavku).

Nevýhody:

  • Môže skrývať závislosti.
  • Zložitejšie modulárne testovanie, pretože singleton je globálny stav.
  • Porušuje princíp jednotnej zodpovednosti (trieda môže byť zodpovedná aj za svoju logiku, aj za správu svojho životného cyklu).
  • Môžu nastať problémy s viacvláknovým spracovaním, ak nie je správne implementovaný.