Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C# Singleton Design Pattern(Singleton Tasarım Deseni)

1. sayfa da anlatılan Singleton Design Pattern yönetimi , Constructor’ı private yaptıktan sonra , geriye Singleton tipinde değer dönen static metodumuz da kontrollü bir şekilde nesne oluşturup gönderiyorduk.Eğer nesne yoksa oluşturup gönderiyorduk.Eğer nesne varsa var olan nesneyi gönderiyorduk.
Şimdi ise aynı mantıkta static property ile çalışacağız.
Bu yöntemi de Singleton.cs classında hazırlayacağım.
2.YOL

    class Singleton
    {
        private Singleton()
        { }
        private static Singleton nesnem;
//static yapı içerisinde kullanacağımız için bunun da static olması gerekiyor.
//static yapılarlar içinde kullanılanlar static olmalıdırlar.
        public static Singleton NesneVer
        {
            get { return nesnem; }
        }

        static Singleton()
        {
            nesnem = new Singleton();
        }

    }

Yukarıdaki kod bloğundaki mantığa değineyim.Constructorı private yapılarak,dışarıda bu class üzerinden nesne yaratılmasını engelliyoruz.Singleton tipinde static bir private refenrans oluşturuyorum.Bu referansı dışarıya kontrollü açmak için public tipinde gerite Singleton dönen statik Nesne adlı propertymi yazıyorum.Bu propertyi bize sadece nesneyi göndereceği için set bloğunu kaldırıyorum.Sonra static constructor oluşturuyorum.Bu static constructorın özelliklerinden hatırlarsanız eğer, static elemanlardan biri çalıştırılmaya kalkışıldığı zaman ondan önce çalışır.Ve bir kere çalışır.Bir daha çalışmaz.Bu sebepten dolayı Singleton orneknesne = Singleton.Nesne dediğimiz zaman, ilk static constructor çalışacağı için bir nesne oluşturacaktır.Ve bu nesneyi Singleton tipteki nesnem referansına bağlayacaktır.Ve property sayesinde o nesneyi orneknesne referansına bağlıyacaktır.Singleton sınıfından ikinci bir nesne oluşturulduğun da static yapıcı metodumuz çalışmayacağı için nesnem referansına başka bir nesne bağlanmayacak ve daha önceden var olan nesne property sayesinde gönderilecektir.
Şimdi Singleton sınıfından iki nesne çağıralım.

            Singleton nesnem1 = Singleton.Nesne;
            Singleton nesnem2 = Singleton.Nesne;

            if (nesnem1.GetHashCode()==nesnem2.GetHashCode())
            {
                MessageBox.Show("Test");
            }

Yukarıda çağrılan nesnelerin aynı olup olmadığı denetlenmiştir.Ve sizde denerseniz “Test” yazısını göreceksiniz.Buda bir ispattır.
Şimdilik bu kadar.Bir sonraki yazım da görüşmek üzere.
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

10 Cevaplar

  1. Hüseyin Özdil dedi ki:

    Çok teşekkür ederim hocam

  2. root dedi ki:

    Gençay hocam merhabalar,
    Sitenizde Singlenton design pattern ile ilgili yazıyı okudum aynı zamanda youtube atmış olduğunuz videoyuda izledim. Fakat kafama takılan size sormak istediğim bir soru var. Şimdi ben projemi normalde Db-first yaklaşımıyla db yi projeme bağlıyordum ve controller kısmında örneğin; Northwind ent= new Northwind(); diyip ent.Emplooyee diyip alanlarıma ulaşıyordum vs buraya kadar sıkıntı yok idi şimdi ben singleton design pattern kullanacağım zaman singleton ile db-first olayını nasıl ilişkilendire bilirim bunu yapamadım. Bana bu konuda yardımcı olabilirseniz sevinirim.

    • Gençay dedi ki:

      Merhaba,

      Database First bir yaklaşım. Lakin Singleton bir tasarım deseni. İlişkilendirmek istediğiniz konu context nesnesini singleton olarak tasarlamak mı?

  3. Yasin dedi ki:

    Hocam singleton yapısını proje içerisinde bir çok classta kullanmak bizi kod tekrarına düşürmez mi ? bu yapıyı generic bir hale getirmek ne kadar mantıklı olur

  4. Hero dedi ki:

    Merhaba,

    Hocam bu bilgileri açık ve anlaşılır dille anlattığınız için çok teşekkür ederim. Allah razı olsun

  5. Cagatay Gur dedi ki:

    Merhaba,

    Microsoft artik sql connection gibi durumlarin yonetimini iyi yapiyor, bu sebeple neden projejelerimizde AddTransient, AddScoped yerine AddSingleton kullanmayalim?

    Yani AddSingleton ile projeyi aslinda iyi bir sekilde yonetibiliriz. Rica etsem sizde dusuncelerinizi paylasir misiniz

    https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling?redirectedfrom=MSDN

    • Gençay dedi ki:

      Konuya dair düşüncem pek yok gibi 🙂 İsterseniz siz düşüncelerinizi örnek durumlar üzerinden biraz daha açınız. Belki o zaman zihnimizde muhakeme edecek fikirler canlanabilir.
      Sevgiler.

  1. 22 Nisan 2016

    […] yanında ayriyetten Facade sınıfını Singleton Design Pattern olarak tasarlamanızı […]

  2. 27 Ağustos 2023

    […] Singleton Desenini C#'ta Uygulamak öğrenmek için tıklayın(ingilizce), öğrenmek için tıklayın(Türkçe) […]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir