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:
- Súkromný konštruktor, aby sa zakázalo vytváranie nových inštancií pomocou
new. - Súkromné statické pole na uloženie jediného inštancie.
- 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ý.