Ce este pattern-ul de proiectare Singleton?
sobes.tech AI
Răspuns de la AI
Modelul Singleton garantează că o clasă are o singură instanță și oferă un punct de acces global la aceasta.
Este utilizat atunci când este necesară o singură instanță a unei resurse, de exemplu:
- Manager de configurare
- Pool de conexiuni la bază de date
- Logger
Implementări:
-
Inițializare leneșă (Lazy Initialization): Instanța este creată la prima utilizare.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Constructor privat public static Singleton Instance { get { if (instance == null) { lock (lockObject) { if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Inițializare statică (Eager Initialization): Instanța este creată la încărcarea clasei.
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Constructor privat public static Singleton Instance { get { return instance; } } }Avantaj: siguranță în multi-threading implicit, implementare mai simplă. Dezavantaj: instanța este creată chiar dacă nu este utilizată.
-
Utilizând
Lazy<T>:.NET Framework oferă suport încorporat pentru inițializarea leneșă.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Constructor privat public static Singleton Instance { get { return lazyInstance.Value; } } }Avantaj: siguranță în multi-threading și inițializare leneșă gata de utilizare, cod mai curat.
Avantajele Singleton:
- Control asupra numărului de instanțe.
- Punct de acces global.
- Inițializare leneșă (în unele implementări).
Dezavantaje ale Singleton:
- Poate încălca principiul responsabilității unice.
- Îngreunează testarea unitară.
- Poate duce la o dependență puternică a codului.