Junior
Mi az a Singleton tervezési minta?
sobes.tech MI
Válasz az MI-től
A Singleton minta biztosítja, hogy egy osztálynak csak egy példánya legyen, és globális hozzáférési pontot biztosít hozzá.
Olyankor használják, amikor egy erőforrásból csak egy példány szükséges, például:
- Konfigurációkezelő
- Adatbázis-kapcsolat pool
- Naplózó (logger)
Implementációk:
-
Lusta inicializálás (Lazy Initialization): A példány az első hozzáféréskor jön létre.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Privát konstruktor public static Singleton Instance { get { if (instance == null) { lock (lockObject) { if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Statikus inicializálás (Eager Initialization): A példány a osztály betöltésekor jön létre.
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Privát konstruktor public static Singleton Instance { get { return instance; } } }Előny: alapértelmezett szálbiztonság, egyszerűbb megvalósítás. Hátrány: a példány akkor is létrejön, ha nem használják.
-
Lazy<T>használatával:.NET Framework beépített támogatást nyújt a lusta inicializáláshoz.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Privát konstruktor public static Singleton Instance { get { return lazyInstance.Value; } } }Előny: szálbiztonság és lusta inicializálás készen, tisztább kód.
A Singleton előnyei:
- Az példányok számának kontrollja.
- Globális hozzáférési pont.
- Lusta inicializálás (egyes megvalósításokban).
A Singleton hátrányai:
- Megtarthatja az egyedi felelősség elvét.
- Nehezíti az egységtesztelést.
- Erős kötődést okozhat a kódhoz.