Junior
Ce este pattern-ul Singleton?
sobes.tech AI
Răspuns de la AI
Singleton este un pattern de creare care garantează că o clasă are o singură instanță și oferă un punct de acces global la acea instanță. Se aplică atunci când este nevoie de un obiect unic pentru gestionarea unei resurse sau stări comune.
Principiul de funcționare:
- Constructor privat pentru a interzice crearea de noi instanțe folosind
new. - Câmp static privat pentru stocarea singurei instanțe.
- Metodă statică publică care oferă acces la instanță:
- Verifică dacă instanța a fost creată.
- Dacă nu, o creează și o stochează în câmpul static.
- Returnează instanța creată sau existentă.
Exemplu în Java:
public class Singleton {
// Câmp static privat pentru stocarea instanței
private static Singleton instance;
// Constructor privat
private Singleton() {
// Inițializare dacă este necesar
}
// Metodă statică publică pentru obținerea instanței
public static Singleton getInstance() {
// Verificare null pentru inițializare leneșă
if (instance == null) {
// Sincronizare pentru siguranță în medii multi-thread
synchronized (Singleton.class) {
// Verificare dublă în blocul sincronizat
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// Logica de business a singletonului
public void doSomething() {
System.out.println("Singleton instance is doing something.");
}
}
Aplicare în QA Automation:
- Gestionarea configurațiilor de testare (fișiere de proprietăți, variabile de mediu).
- Instanță unică a driver-ului browserului (WebDriver) atunci când toate testele utilizează același driver.
- Manager de loguri sau rapoarte.
- Pool de conexiuni la baza de date.
Avantaje:
- Asigură existența unei singure instanțe.
- Oferă un punct de acces convenabil la instanță.
- Inițializare leneșă (creată doar la prima solicitare).
Dezavantaje:
- Poate ascunde dependențe.
- Îngreunează testarea unitară, deoarece singleton-ul este o stare globală.
- Încalcă principiul responsabilității unice (clasa poate fi responsabilă pentru logica sa și pentru gestionarea ciclului de viață).
- Pot apărea probleme de concurență dacă nu este implementat corect.