Singleton Design Pattern

Logo
Singleton Design Pattern
  • 843 Okuma
  • 0 Yorum

Proje geliştirme süreçlerinde hiç kuşkusuz ki nesneler ile çalışıyoruz ve bu nesnelerden örnekler üretiyoruz. Nesnelerimiz arttıkça nesne üretimi de haliyle artıyor ve üretilen her nesne bellekte bir yer kaplıyor. Bu da bir maliyet ve performans kaybı olarak bize geri dönüyor.Böyle bir sorundan kurtulmak istiyorsak Singleton Design Pattern tamda bu noktada devreye giriyor.

Peki Singleton Design Pattern Nedir ?

Singleton Design Pattern uygulamanın yaşam süresince bir nesnenin bir kez oluşturulmasını sağlar. Böylelikle nesne bir kez üretilir ve gelen bütün taleplere üretilen nesne üzerinden cevap verilir. Ve tekrar bir nesne üretimi yapılmaz.

Bir adet Student sınıfı oluşuturuyoruz ve bize bir student bilgisini dönmesini sağlıyoruz.

Örnek;
public class Student
    {
        public string Name { get; set; }
        public string SurName { get; set; }
        public int Age { get; set; }

        public Student()
        {
            Name = "Kübra";
            SurName = "Solmaz";
            Age = 25;
        }
    }

public class StudentManager
    {
        private StudentManager()
        {
            
        }
        static StudentManager _studentManager;        
        static object _lock = new object();
        public static StudentManager Instance()
        {
            lock (_lock)
            {
                if (_studentManager==null)
                {
                    _studentManager=new StudentManager();
                }
                return _studentManager;
            }
        }
        public string GetStudent(Student student)
        {
            return String.Format($"Name : {student.Name} SurName: {student.SurName} Age :{student.Age}");
        }
    }
  • Dışarıdan nesne üretimini engellemek için consructor’ı private belirledik ve bir adet manager field’ı oluşturduk.
  • Bir nesne için singleton uygulayacaksak oluşturulan ilk örneğin kilitlenmesi gerekmektedir.Eğer kilitleme yapılmazsa iki farklı thread in ard arda yapacağı istek sonucu birinin sonucuna ulaşılmadan yeni bir örneklendirme yapılır. Kilitleme yapılırsa nesne örneği kilitli olacağından, oluşturulan ilk örneğin işleminin bitmesini bekler ve ikinci bir istek yapıldığında oluşturulan ilk örneği kullanır.Bunun önüne geçmek için lock bloğunu kullandık.
  • StudentManager içersinde ki Instance() metodu ile nesnenin mevcut durumu kontrol edilir. Nesne üretilmiş ve bellekte var ise üretilmiş olan nesne örneği dönülür.Nesne daha önce üretilmemiş ise yeni bir nesne üretimi yapılır ve geriye o nesne dönülür.

Sıra geldi Program.cs içersinde manager sınıfımızı kullanmaya.

Örnek;
 var manager = StudentManager.Instance();
            Console.WriteLine(manager.GetStudent(new Student()));
            Console.ReadKey();

Projeyi çalıştırıp debug ettiğinizde nesne üretiminin bir kez yapıldıktan sonra diğer bütün taleplerin ilk üretilen nesne üzerinden karşılandığını göreceksiniz. Böylelikle Singleton Design Pattern ile nesne üretimini merkezi bir noktadan daha performanslı bir hale getirmiş olduk.

Speedtest

yazar
Yamak

Emre Bingül