Sobes.tech
Junior

Singleton dizayn nümunəsi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Singleton nümunəsi, bir sinifin yalnız bir nümunəsinin olmasını təmin edir və ona qlobal giriş nöqtəsi təqdim edir.

İstifadə olunur, yalnız bir resurs nümunəsinə ehtiyac olduqda, 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 pozur.
  • Birlik testlərini çətinləşdirir.
  • Koda güclü bağlılıq gətirə bilər.