Kas ir Singleton dizaina paraugs?
sobes.tech AI
Atbilde no AI
Singleton paraugs nodrošina, ka klasei ir tikai viens eksemplārs un nodrošina globālu piekļuvi tam.
Tiek izmantots, kad ir nepieciešams tikai viens resursa eksemplārs, piemēram:
- Konfigurācijas pārvaldnieks
- Savienojumu baseins ar datu bāzi
- Žurnāla rakstītājs
Realizācijas:
-
Vēla inicializācija (Lazy Initialization): Eksemplārs tiek izveidots pirmajā piekļūšanas reizē.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Privāts konstruktor public static Singleton Instance { get { // Null pārbaude ļauj izvairīties no bloķēšanas lielākajā daļā gadījumu if (instance == null) { // Bloķēšana daudzvītņu drošībai lock (lockObject) { // Atkārtota pārbaude iekšā bloķēšanas if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Statiskā inicializācija (Eager Initialization): Eksemplārs tiek izveidots klases ielādes laikā:
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Privāts konstruktor public static Singleton Instance { get { return instance; } } }Priekšrocība: automātiska drošība daudzvītņu vidē, vienkāršāka realizācija. Trūkums: instances tiek izveidots pat ja tas netiek izmantots.
-
Ar
Lazy<T>izmantošanu: .NET Framework nodrošina iebūvētu atbalstu veltītai inicializācijai.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Privāts konstruktor public static Singleton Instance { get { return lazyInstance.Value; } } }Priekšrocība: daudzvītņu drošība un veltīta inicializācija tieši no kastes, tīrs kods.
Singleton priekšrocības:
- Kontrolē eksemplāru skaitu.
- Globāla piekļuves punkts.
- Vēla inicializācija (dažās realizācijās).
Trūkumi:
- Var pārkāpt vienas atbildības principu.
- Grūti veikt vienību testus.
- Var novest pie stipras koda sasaistes.