C# ile Singleton Tasarım Deseni: Kullanım Alanları ve Örnek Kodlar

Singleton Design Pattern bir sınıftan yalnızca bir örnek oluşturulmasını sağlayan ve bu örneğe global olarak erişilebilmesini garanti eden bir tasarım desenidir. Bu desen, uygulama boyunca aynı nesneye ihtiyaç duyulan durumlarda tercih edilir.

Nerede Kullanılır?

  • Veritabanı bağlantı yönetimi: Bir uygulamanın tek bir veritabanı bağlantısına ihtiyaç duyduğu durumlarda kullanılır.
  • Konfigürasyon ayarları: Uygulama boyunca değişmeyen ayarların tek bir yerden yönetilmesini sağlar.
  • Log sistemi: Tüm uygulamanın tek bir log dosyasına yazması gereken durumlarda kullanılır.
  • Cache yönetimi: Uygulamanın sadece bir cache yapısını kullanmasını sağlamak için kullanılır.

C# ile Singleton Örneği:

public class Singleton
{
    private static Singleton _instance;
    private static readonly object _lock = new object();

    // Constructor private, bu sayede dışarıdan nesne oluşturulamaz
    private Singleton() 
    {
    }

    // Tek bir örneğe erişmek için kullanılan metod
    public static Singleton Instance
    {
        get
        {
            // Eğer nesne daha önce oluşturulmadıysa
            if (_instance == null)
            {
                // Kilitleme mekanizması, thread-safe hale getirir
                lock (_lock)
                {
                    if (_instance == null)
                    {
                        _instance = new Singleton();
                    }
                }
            }
            return _instance;
        }
    }

    // Singleton'da örnek bir metod
    public void Log(string message)
    {
        Console.WriteLine("Log message: " + message);
    }
}

Kullanımı:

class Program
{
    static void Main(string[] args)
    {
        // Singleton örneğine erişim
        Singleton singleton1 = Singleton.Instance;
        Singleton singleton2 = Singleton.Instance;

        // Aynı instance olduğunu kontrol edelim
        if (singleton1 == singleton2)
        {
            Console.WriteLine("İki değişken de aynı instance'a işaret ediyor.");
        }

        // Singleton'dan bir metot çağırma
        singleton1.Log("Singleton Design Pattern kullanılıyor.");
    }
}

Açıklama:

  1. Private Constructor: Dışarıdan nesne oluşturulmasını engeller.
  2. Static Property (Instance): Singleton nesnesine erişimi sağlar. Eğer nesne yoksa, kilitleme işlemiyle thread-safe bir şekilde oluşturulur.
  3. Lock mekanizması: Çoklu thread'lerin aynı anda Singleton nesnesini oluşturmasını engeller.

Bu örnek, Singleton deseninin nasıl kullanılacağını göstermektedir ve aynı nesneye global olarak tek bir erişim sağlanır.