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

  1. Privatni konstruktor, da bi se zabranilo kreiranje novih primera pomoću new.
  2. Privatno statičko polje za skladištenje jedinstvenog primera.
  3. 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.