Bu makalede singleton design pattern nedir, nasıl kullanılır bu başlıklara değineceğiz.
Bilindiği gibi oluşturulan her bir nesnenin örneği bellekte yer kaplamaktadır. Bazı nesnelerde her bir istek için ayrı ayrı yeni bir örnek oluşturmaya gerek yoktur. Örneğin, db connection gibi. Çünkü her bir istek için yeni bir nesne örneği oluşturmak performans kaybına yol açar.
Bu paterni kullanarak nesneyi ürettiğimizde, üretilen nesne bellekte sabit kalır. (Bir yöntem ile sonladırılmadığı sürece.)
Singleton design pattern’i kullanmadan önce kullanmaya gerek var mı yok mu bunu analiz etmek gerekir. Yukarıda verilen örnek gibi, herkezin kullanacağı, yoğun kullanılan bir nesne ise bu pattern uygulanabilir. Lakin nadir kullanılacak bir nesne için bu pattern’i uygulamamak gerekir.Böylece boşuna bellekte yer kaplamayacaktır.
Ayrıca aynı anda nesneyi örneği oluşturmaya çalışan iki istek gelebilir.Böyle bir durumda (nesne eğer oluşmamışsa) iki nesne örneği oluşma durumu söz konusudur. Bunu çözmek için nesneyi (lock)kilitleriz. Yani ilk gelen isteğe cevap verilir daha sonra kilit açılır ve diğer isteğe cevap verilir.
using System;
namespace SingletonPattern
{
class Program
{
static void Main(string[] args)
{
var nesne = Nesne.SingletonOlarakOlustur();
nesne.VeriKaydet();
}
}
public class Nesne
{
private static Nesne _nesne;
private static readonly object _lockObject = new object();
public Nesne() { }
public static Nesne SingletonOlarakOlustur()
{
lock (_lockObject)
{
if (_nesne == null)
_nesne = new Nesne();
}
return _nesne;
}
public void VeriKaydet()
{
Console.WriteLine("Veri Kaydedildi");
}
}
}