Singleton Pattern

Singleton pattern,kısaca nesnemizden sadece bir örnek oluşturulup kullanılmasıdır.

Hangi durumlarda kullanırız.Thread pools,cache,kayıt defteri gibi merkezi durumda olan ayarları kullanan objeler,loglama için kullanacağımız obje leri yaratırken bu pattern i uygulayabiliriz.Birden fazla obje oluşturmanın sistem üzerinde oluşturacağı yanlış durumlar oluşturacağı zaman yararlanabiliriz.

Global variable tanımlayıp kullanmadan farkı nedir diyecek olursak,global variable atadığımız bu obje uygulamanın başlangıcında oluşturulur.Bu nesne yoğun bir kaynakta kullanıyor olabilir ve uygulamanız bu objeyi kullanmadan sonlanmıyorsa,sistemde hatalar oluşabilir.

    public class Singleton
    {
        //we have a static variable to hold our one instance of the class singleton.
        private static Singleton uniqueInstance;
        private static Object obj = new Object();

        private Singleton() { }

        public static Singleton GetInstance()
        {

            if (uniqueInstance == null)
            {
                uniqueInstance = new Singleton();
            }

            return uniqueInstance;
        }

    }

Neden public constructor tanımlamadık,eğer tanımlasaydık nesnemizin yeni bir örneğini new operatorü ile oluşturabilirdik.Bu durumda amacımıza hitap etmezdi.

Yukarıdaki basit kod bloğumuzu çoklu thread kullanan uygulamalarımız için düşünürsek eğer aynı nesnemize aynı anda birden fazla thread ulaşacak ve aynı kaynağı tüketmeye çalışacaktı.Bu durumu,kodumuzu aşağıdaki gibi değiştirerek halledebiliriz.

public static Singleton GetInstance()
{
            try
            {
                Monitor.Enter(obj);
                if (uniqueInstance == null)
                {
                    uniqueInstance = new Singleton();
                }
                
            }
            catch
            {
            }
            finally
            {
                Monitor.Exit(obj);
            }
            return uniqueInstance;

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.