Sobes.tech
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:

  1. Privatinis konstruktorius, kad uždraustų kurti naujus egzempliorius naudojant new.
  2. Privatinis statinis laukas, saugantis vienintelį egzempliorių.
  3. 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.