Templates by BIGtheme NET
Anasayfa / C# / Singleton Design Pattern

Singleton Design Pattern

Singleton design pattern nedir ve çalışma mantığını nasıldır sorularını cevaplayalım.

Uygulama üzerinde tanımladığımız her bir nesne bellekte yer kaplar.Tanımladığımız değişkenler, oluşturulan nesneler vs.

Bazı nesneler vardır ki her bir istek için ayrı ayrı oluşturmaya gerek yoktur.Örneğin db connection gibi.Her istemci için ayrı ayrı bu nesneyi oluşturmak performans kaybına sebep olacaktır.Singleton ile oluşturulan nesneler tek bir örnek üzerinde kalır ve her istemci bu örneği kullanır.

Bu tip durumlar için statik class lar da kullanılabilir ancak böyle bir kullanımda nesne yönelimli programlama ilkelerine aykırı davranmış oluruz.

Singleton(tek nesne) tasarım kalıbı, bir sınıfın tek bir örneğini almak için kullanılır.Amaç oluşturulan nesneye global erişim noktası sağlamaktır.Sistem çalıştığı sürece ikinci bir örnek oluşturulmaz, böylelikle istenen nesnenin tek bir defa oluşturulması garanti altına alınacaktır.Singleton nesneler ilk çağırıldıklarında bir kere oluşturulurlar ve sonraki istekler bu nesne üzerinden karşılanır.

Çoklu istemcili, örneğin bir web projesindeki nesne için singleton uygulayacaksak oluşturulan ilk örneğin kilitlenmesi gerekmektedir.Eğer kilitleme yapılmazsa iki farklı thread in ard arda yapacağı istek sonucu, birinin sonucuna ulaşamadan yeni bir örneklendirme yapar.Kilitleme yapılırsa nesne örneği kilitli olacağından, oluşturulan ilk örneğin işleminin bitmesini bekler ve ikinci bir istek yapıldığında oluşturulan ilk örneği kullanır.

Şimdi singleton nesneyi nasıl oluşturacağımıza bakalım:

Singleton nesnemizi bu şekilde oluşturduk.Şimdi bu nesneyi nasıl kullanacağımızı görelim:

Singleton tasarım kalıbını bu şekilde her nesne için uygulayamayız.Şöyle ki projemizde her kullanıcı için farklı işlemler gerçekleştiren bir class için singleton uygularsak her bir kullanıcı için aynı verileri kullanmış oluruz.Örneğin her kullanıcının kullanıcı adı aynı olur gibi.

Gerçek hayatta proje geliştirirken config, connection gibi her istemci için yeni örnek oluşturulan yerlerde ve yardımcı fonksiyonları çağırdığımız kısımlarda singleton tasarım kalıbını rahatlıkta kullanabiliriz.

Kullanılacak bütün tasarım kalıpları için geçerli bir kural vardır ki; kalıbı kullanmadan önce ihtiyacı iyi gözden geçirip, kullanılacak tasarım kalıbına ona göre karar vermeliyiz.