Junior
Singleton tasarım deseni nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Singleton Deseni, bir sınıfın yalnızca bir örneği olmasını sağlar ve ona küresel erişim noktası sunar.
Bir kaynak için tek bir örneğin gerektiği durumlarda kullanılır, örneğin:
- Yapılandırma Yöneticisi
- Veritabanı Bağlantı Havuzu
- Günlük Kaydedici (logger)
Uygulamalar:
-
Tembel Başlatma (Lazy Initialization): Örnek ilk erişimde oluşturulur.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Özel yapıcı public static Singleton Instance { get { if (instance == null) { lock (lockObject) { if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Statik başlatma (Eager Initialization): Örnek, sınıf yüklenirken oluşturulur.
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Özel yapıcı public static Singleton Instance { get { return instance; } } }Avantaj: varsayılan olarak çoklu iş parçacığı güvenliği, daha basit uygulama. Dezavantaj: örnek, kullanılmasa bile oluşturulur.
-
Lazy<T>kullanımı:.NET Framework, tembel başlatma desteği sağlar.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Özel yapıcı public static Singleton Instance { get { return lazyInstance.Value; } } }Avantaj: çoklu iş parçacığı güvenliği ve hazır tembel başlatma, daha temiz kod.
Singleton Avantajları:
- Örnek sayısı üzerinde kontrol.
- Küresel erişim noktası.
- Tembel başlatma (bazı uygulamalarda).
Singleton Dezavantajları:
- Tek sorumluluk ilkesini ihlal edebilir.
- Birim testlerini zorlaştırır.
- Koda güçlü bağımlılığa yol açabilir.