Junior
Šta je Singleton obrazac?
sobes.tech АИ
Одговор од АИ
Singleton je obrazac za kreiranje koji garantuje da klasa ima samo jedan primerak i pruža globalnu tačku pristupa tom primerku. Koristi se kada je potreban jedinstveni objekat za upravljanje zajedničkim resursom ili stanjem.
Princip rada:
- Privatni konstruktor, da bi se zabranilo kreiranje novih primera pomoću
new. - Privatno statičko polje za skladištenje jedinstvenog primera.
- Javni statički metod koji pruža pristup primeru:
- Proverava da li je primerak kreiran.
- Ako nije, kreira ga i čuva u statičkom polju.
- Vraća kreirani ili postojeći primerak.
Primer na Javi:
public class Singleton {
// Privatno statičko polje za skladištenje primera
private static Singleton instance;
// Privatni konstruktor
private Singleton() {
// Inicijalizacija, ako je potrebna
}
// Javni statički metod za dobijanje primera
public static Singleton getInstance() {
// Provera na null za lenju inicijalizaciju
if (instance == null) {
// Sinhronizacija za bezbednost u višeprocesnom okruženju
synchronized (Singleton.class) {
// Ponovna provera na null unutar sinhronizovanog bloka (Double-Checked Locking)
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// Biznis logika singletona
public void doSomething() {
System.out.println("Singleton instance is doing something.");
}
}
Primena u QA Automation:
- Upravljanje konfiguracionim podešavanjima testova (datoteke sa svojstvima, promenljive okruženja).
- Jedinstveni primerak WebDriver-a za pretraživač.
- Menadžer logova ili izveštaja.
- Pool konekcija sa bazom podataka.
Prednosti:
- Garantuje da postoji samo jedan primerak.
- Pruža jednostavnu tačku pristupa primeru.
- Leniva inicijalizacija (kreira se tek pri prvom zahtevu).
Nedostaci:
- Može sakriti zavisnosti.
- Ukomplikuje modularno testiranje, jer je singleton globalno stanje.
- Krši princip jedinstvene odgovornosti (klasa može biti odgovorna i za svoju logiku i za upravljanje svojim životnim ciklusom).
- Mogući problemi sa višepotokašću ako se ne implementira pravilno.