Junior
Čo je to návrhový vzor Singleton?
sobes.tech AI
Odpoveď od AI
Vzorok Singleton zabezpečuje, že trieda má iba jeden inštanciu a poskytuje globálny prístup k nemu.
Používa sa, keď je potrebný jediný inštancia zdroja, napríklad:
- Správca konfigurácie
- Pool pripojení k databáze
- Loggér
Implementácie:
-
Lazivá inicializácia (Lazy Initialization): Inštancia sa vytvára pri prvom prístupe.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Súkromný konštruktor public static Singleton Instance { get { // Kontrola na null umožňuje vyhnúť sa zámku vo väčšine prípadov if (instance == null) { // Zámok pre bezpečnosť vlákna lock (lockObject) { // Opätovná kontrola na null vo vnútri zámku if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Statická inicializácia (Eager Initialization): Inštancia sa vytvára pri načítaní triedy.
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Súkromný konštruktor public static Singleton Instance { get { return instance; } } }Výhoda: predvolená bezpečnosť vlákna, jednoduchšia implementácia. Nevýhoda: inštancia je vytvorená, aj keď sa nepoužíva.
-
Pomocou
Lazy<T>: .NET Framework poskytuje vstavanú podporu pre lazy inicializáciu.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Súkromný konštruktor public static Singleton Instance { get { return lazyInstance.Value; } } }Výhoda: bezpečnosť vlákna a lazy inicializácia priamo z krabice, čistejší kód.
Výhody Singleton:
- Kontrola nad počtom inštancií.
- Globálny prístupový bod.
- Lazy inicializácia (v niektorých realizáciách).
Nevýhody Singleton:
- Môže narušiť princíp jednotnej zodpovednosti.
- Zťažuje jednotkové testovanie.
- Môže viesť k silnej väzbe kódu.