Junior
Co je to vzor návrhu Singleton?
sobes.tech AI
Odpověď od AI
Vzor Singleton zaručuje, že třída má pouze jeden instance a poskytuje globální přístup k němu.
Používá se, když je potřeba jediný instance zdroje, například:
- Správce konfigurace
- Pool připojení k databázi
- Logovací systém
Implementace:
-
Líná inicializace (Lazy Initialization): Instance je vytvořena při prvním přístupu k ní.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Soukromý konstruktor public static Singleton Instance { get { // Kontrola na null umožňuje vyhnout se zámku ve většině případů if (instance == null) { // Zámek pro bezpečnost vlákna lock (lockObject) { // Opětovná kontrola na null uvnitř zámku if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Statická inicializace (Eager Initialization): Instance je vytvořena při načtení třídy.
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Soukromý konstruktor public static Singleton Instance { get { return instance; } } }Výhoda: výchozí bezpečnost vlákna, jednodušší implementace. Nevýhoda: instance je vytvořena, i když není použita.
-
Pomocí
Lazy<T>: .NET Framework poskytuje vestavěnou podporu líné inicializace.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Soukromý konstruktor public static Singleton Instance { get { return lazyInstance.Value; } } }Výhoda: bezpečnost vlákna a líná inicializace přímo z krabice, čistší kód.
Výhody Singletonu:
- Kontrola nad počtem instancí.
- Globální přístupový bod.
- Líná inicializace (v některých implementacích).
Nevýhody Singletonu:
- Může narušovat princip jediné odpovědnosti.
- Ztěžuje jednotkové testování.
- Může vést k silné vazbě kódu.