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

  1. Constructor privat pentru a interzice crearea de noi instanțe folosind new.
  2. Câmp static privat pentru stocarea singurei instanțe.
  3. 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.