"Enter"a basıp içeriğe geçin

C# Singleton Design Pattern Kullanımı

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.

İşte singleton design pattern burada devreye giriyor. Singleton pattern ile aynı nesne için birden çok istek gelmiş olsa bile, o nesneden sadece bir defa üretilir. İstek geldiğinde nesne üretilmemişse oluşturulur, eğer üretilmiş ise üretilen nesne return edilir.

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.

Aşağıda singleton pattern kullanımıyla ilgili örnek verilmiştir.

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");
        }
    }
}
Yazıyı Paylaşmak İster misin?
Share on Facebook
Facebook
Pin on Pinterest
Pinterest
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Share on Tumblr
Tumblr
Share on Reddit
Reddit
    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir