Singleton Tasarım Deseni (Singleton Pattern)

19 Nisan 2016 9 dk okuma süresi 144 okunma

Singleton tasarım deseni, bir sınıftan sadece tek bir instance oluşturulabilmesini sağlamaktır. Singleton tasarım deseni ile nesnenin gereksiz yere birçok kez oluşturulması engellenir ve ihtiyaç duyulduğunda daha önceden oluşturulmuş olan instance kullanılır. Yani program başladığında bir kere yaratılır ve bitişe kadar hep o nesne kullanılır. Ram üzerinde statik bir nesne olarak görev yapar. Veritabanı bağlantısı, loglama ve dosya işlemleri gibi yerlerde sıklıkla kullanılır.

4 farklı yazım şekli vardır ve aşağıdaki gibidir.

Genel Kullanım

public class Singleton
{
   private static Singleton instance;

   private Singleton() { }

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         
         return instance;
      }
   }
}


Static Kullanım

public class Singleton
{
   private static readonly Singleton instance = new Singleton();
   
   private Singleton() { }

   public static Singleton Instance
   {
      get 
      {
         return instance; 
      }
   }
}


Multithreading Kullanım

public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object _lock = new object();

    private Singleton() {}

    public static Singleton Instance
    {
        get
        {
            lock (_lock)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                
                return instance;
            }
        }
    }
}


// veya


public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object _lock = new object();

    private Singleton() {}

    public static Singleton GetInstance
    {
        get
        {
            if (instance == null)
            {
                lock (_lock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }


                }
            }
            
            return instance;
        }
    }
}


Generic Kullanım

public class GenericSingleton<T> where T : new()
{
    private static T ms_StaticInstance = new T();

    public T GetInstance()
    {
        return ms_StaticInstance;
    }
}

var instance = new GenericSingleton<SimpleType>();
var simple = instance.GetInstance();


Gerçek hayattan örnek

public class Singleton
{
   private static Singleton instance;

   private Singleton() { }

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         
         return instance;
      }
   }
   
   public int Deger1 { get; set; }
   public int Deger2 { get; set; }
   
   public int Toplam()
   {
        return Deger1 + Deger2;
   }
}


class Program 
{
    public void Main()
    {
        var _instance = new Singleton.Instance();
        _instance.Deger1 = 10;
        _instance.Deger2 = 20;
        var toplam = _instance.Toplam();
        // toplama islemi yapilir ve sonuc 30
        
        var _instance2 = new Singleton.Instance();
        var toplam = _instance2.Toplam();
        // bunun sonucu da 30'dur. 
        
        var _instance3 = new Singleton.Instance();
        var toplam = _instance3.Toplam();
        // bunun sonucu da 30'dur.         
    }
}


Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
Facade tasarım deseni nedir? Nerelerde ve hangi amaçla kullanılır?