Junior
Kas yra Singleton modelis?
sobes.tech AI
Atsakymas iš AI
Singleton yra kūrybinis šablonas, kuris užtikrina, kad klasėje yra tik vienas egzempliorius ir suteikia globalų prieigą prie šio egzemplioriaus. Naudojamas, kai reikalingas vieningas objektas bendram ištekliui ar būsenai valdyti.
Veikimo principas:
- Privatinis konstruktorius, kad uždraustų kurti naujus egzempliorius naudojant
new. - Privatinis statinis laukas, saugantis vienintelį egzempliorių.
- Viešas statinis metodas, kuris suteikia prieigą prie egzemplioriaus:
- Patikrina, ar egzempliorius jau sukurtas.
- Jei ne, sukuria ir išsaugo statiniame lauke.
- Grąžina sukurtą arba esamą egzempliorių.
Pavyzdys Java kalba:
public class Singleton {
// Privatinis statinis laukas egzemplioriui
private static Singleton instance;
// Privatinis konstruktorius
private Singleton() {
// Inicijavimas, jei reikalinga
}
// Viešas statinis metodas, gaunantis egzempliorių
public static Singleton getInstance() {
// Lazy inicializacijai null patikrinimas
if (instance == null) {
// Sinchronizacija, siekiant užtikrinti saugumą daugiaprocesinėje aplinkoje
synchronized (Singleton.class) {
// Dar kartą patikrinama null viduje sinchronizuoto bloko (Double-Checked Locking)
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// Singleton verslo logika
public void doSomething() {
System.out.println("Singleton instance is doing something.");
}
}
Naudojimas QA automatizavime:
- Konfigūracijos nustatymų valdymas (savybių failai, aplinkos kintamieji).
- Vienas WebDriver pavyzdys visiems testams.
- Žurnalų ar ataskaitų tvarkyklė.
- Duomenų bazės jungčių poolas.
Privalumai:
- Užtikrina, kad egzistuoja tik vienas egzempliorius.
- Patogus prieigos taškas.
- Lazy inicializacija (sukuriama tik pirmo prašymo metu).
Trūkumai:
- Gali paslėpti priklausomybes.
- Sunkina modulinį testavimą, nes singleton yra globalus būsenos elementas.
- Pažeidžia vienos atsakomybės principą.
- Gali kilti problemų su daugiaprocesiniu valdymu, jei neįgyvendinama tinkamai.