Sobes.tech
Junior

Singleton dizayn naqshi nima?

sobes.tech AI

AIdan javob

Singleton naqshoni, que sınıfın yalnızca bir nümunəsi olmasını təmin edir və ona qlobal giriş nöqtəsi təmin edir.

İstifadə olunur, yalnız bir nümunəyə ehtiyac duyulan zaman, məsələn:

  • Konfiqurasiya meneceri
  • Verilənlər bazası əlaqə hovuzu
  • Loglayıcı

Tətbiqlər:

  • Lazımi İstifadə (Lazy Initialization): Nümunə ilk müraciətdə yaradılır.

    public sealed class Singleton
    {
        private static Singleton? instance = null;
        private static readonly object lockObject = new object();
    
        private Singleton() { } // Özəl konstruktor
    
        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (lockObject)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        }
    }
    
  • Statik İstifadə (Eager Initialization): Nümunə sinif yüklənərkən yaradılır.

    public sealed class Singleton
    {
        private static readonly Singleton instance = new Singleton();
    
        private Singleton() { } // Özəl konstruktor
    
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }
    

    Üstünlük: çoxlu iş parçacığı təhlükəsizliyi, daha sadə tətbiq. Dezavantaj: nümunə istifadə olunmasa belə yaradılır.

  • Lazy<T> istifadə ilə:.NET Framework daxilində lazy başlatma dəstəyi təmin edir.

    public sealed class Singleton
    {
        private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton());
    
        private Singleton() { } // Özəl konstruktor
    
        public static Singleton Instance
        {
            get
            {
                return lazyInstance.Value;
            }
        }
    }
    

    Üstünlük: çoxlu iş parçacığı təhlükəsizliyi və lazy başlatma hazır, daha təmiz kod.

Singleton-in üstünlükləri:

  • Nümunə sayını idarə etmək.
  • Qlobal giriş nöqtəsi.
  • Lazy başlatma (bəzən tətbiqlərdə).

Singleton-in çatışmazlıqları:

  • Yeganə məsuliyyət prinsipini poza bilər.
  • Birlik testlərini çətinləşdirir.
  • Koda güclü bağlılıq gətirə bilər.