Singleton Desing Pattern

Singleton patterni ile bir nesnenin çalışma zamanında tek olmasını garanti edebiliriz. Böyle söyleyince kafamızda bir şeyler canlanmadıysa daha somut örnekler veriyim. Örneğin;

  • veritabanı kullandığımız uygulamalarımızda connectionString bilgisini okumak için kullanabiliriz.
  • Projemizdeki konfigürasyon bilgilerini okumak için de kullanabiliriz.

 

İmplementasyonu çok basit. Aşağıdaki UML şemamızı inceleyerek işe başlayalım.

  • Singleton isimli bir class oluşturduk.
  • Bu class’ın constructorını private olarak tanımlıyoruz. Bunun sebebi ise herkes Singleton singleton=new Singleton() şeklinde belleğe yeni bir nesne yaratmasını engellemek.
  • Yine private olarak Singleton tipinde bir _instance yaratıyoruz.
  • Bu nesneye ulaşmak için ReturnInstance tipinde public bir metot yazıyoruz.
class Singleton
    {
        private static Singleton _instanceSingleton;
        private Singleton() { }

        public static Singleton ReturnInstance()
        {
            if (_instanceSingleton == null)
                _instanceSingleton = new Singleton();


            return _instanceSingleton;
        }

    }

Bu şekilde classımız yazmış olduk. Ama asenkron işlemlerde kullanmak istersek bu metodumuzu thread safe hale getirmeliyiz. Bunu da lock koyarak halledebiliriz.

    class Singleton
    {
        private static Singleton _instanceSingleton;
        private static object  _threadSafeObject=new object();
        private Singleton() { }

        public static Singleton ReturnInstance()
        {
            if (_instanceSingleton == null)
            {
                lock(_threadSafeObject)
                {
                    if (_instanceSingleton == null)
                         _instanceSingleton = new Singleton();
                }
            }
                


            return _instanceSingleton;
        }

    }

 

 


Yayımlandı

kategorisi

,

yazarı:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.