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:
- Private Constructor: Dışarıdan nesne oluşturulmasını engeller.
- Static Property (Instance): Singleton nesnesine erişimi sağlar. Eğer nesne yoksa, kilitleme işlemiyle thread-safe bir şekilde oluşturulur.
- 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.