Design Pattern - Singleton Pattern

Singleton, kurucu (creational) tipinde olup, uygulamamanın yaşam döngüsü boyunca bir nesnenin yalnızca bir kere oluşturulmasını garanti altına alan bir tasarım desenidir.

Sık kullanılan yerler
  • Veri tabanı bağlantı nesnesi: Bu şekilde her bir istek için aynı nesneyi kullanarak veri tabanına bağlantı sağlanır. Bellekte gereksiz yer kaybı önlenecektir.
  • Configuration bilgilerinin okunmasında kullanılır.
Singleton Pattern Bileşenleri

Private Constructor: Private ve parametresiz olmalıdır. Bu şekilde, yeni bir nesne oluşturulması önlenir.

Static Field: Oluşturulan sınıf türünden bir field oluşturulur. Bu field, static ve private olmalıdır.

Static Metot veya Property: Nesne oluşturma işlemi ve nesnenin var olup olmadığının kontrolü bu alanda yapılır. Eğer field'in değeri null ise, bir nesne oluşturulacaktır ve field'a atanacaktır. Geri dönecek değer ise bu field olmalıdır. Bu şekilde her seferinde tek bir nesne oluşturulmuş olacaktır.

Önemli bir detay olarak; eğer çoklu kullanıcının varlığı durumunda, thread güvenliğini sağlamak ve singleton yapısını korumak amacıyla C# keywordü olan lock yapısını da pattern'e eklemek daha mantıklı olacaktır. Kullanılmadığında ise iki farklı thread'in yapacağı istek sonucu yeni bir nesne oluşacaktır ki bu pattern'imizin amacına ters düşecektir.

Profesyonel Hayattan Bir Örnek

Singleton Design Pattern'i veri tabanı bağlantı işleminde kullanılmaya uygundur, Constructor'da Random sınıfının kullanılmasının amacı, sınıfların aynı olduğunu test etmektir.
 

Singleton Pattern'in Gerçeklenmesi
 
İki adet DbConnection süründen değişken oluşturuldu ve DbConnect property'si atandı.

Bu iki değişkenin değeri aynı olacaktır çünkü daha önceden dbConnectionOne değişkeninde instance aldığımız nesne, dbConnectionTwo değişkenine atanmıştır. İkinci kez instance işlemi yapılmadan iki değişken de aynı nesneyi kullanacaktır.

.Net Core ile gelen AddSingleton dependency life cycle metodunun çalışma mantığı da bu patternden gelmektedir ve oluşacak nesne örneği (instance) bir tanedir ve uygulama çalıştığı sürece aynı nesne kullanılmaya devam eder. Her istekte aynı nesne kullanılır.


Özetle;

Singleton Pattern'inin amacı, birden fazla instance oluşturma işleminin kısıtlanması ve uygulamanın çalışması boyunca aynı nesneyi kullanmasıdır.

Keyifli olmasını umarak çalışmalarınızda kolaylıklar diliyorum :)

Yorumlar