Merhaba arkadaşlar, bugün tasarım desenleri serimizin 5. bölümü yani Singleton Pattern kavramını sizlere anlatmaya ve bir örnekle pekiştirmeye çalışacağım.
Singleton Pattern , Creational Patterns yani nesnenin oluşma sürecindeki patternler altında yer alır. En çok biline ve en çok kullanılan design patternlerden birisidir. ( dofactory.com’a göre sık kullanılan patternlerden birisidir. 5/4 kullanım oranı vardır.)
Öncelikle bu nesneyi neden kullanırız ile başlayalım. Singleton pattern bir nesneden yalnızca bir tane üretileceği durumlarda kullanılır. Örneğin database ile bağlantı sağladığımız bir işlem yaptığımızı düşünelim (gerçek senaryolarda çoğu zaman bir veri tabanı ile işlem yapılır), burada bize connection sağlayan sınıfın bir instance alması yeterlidir. Yani her seferinde yeni bir nesne üretilmesine gerek yoktur bildiğiniz gibi her nesne üretimi bellekte yer kaplar ve performansı etkiler.
Singleton pattern burada devreye girerek bir nesnenin bir kere üretilmesini garantiler ve performans, kod yönetimi kısmında avantaj sağlar.
Şimdi bir örnek ile patterni pekiştirmeye ve pratikte görmeye çalışalım.
public class DbManager { private static DbManager dbManager; private static Object lockObject = new Object(); private DbManager() { Id=Guid.NewGuid(); } public Guid Id { get; set; } public static DbManager CreateDbManager() { if (dbManager == null) // This block guarantee just one object { lock (lockObject) { if (dbManager == null) { dbManager = new DbManager(); } } } return dbManager; } }
static void Main(string[] args) { DbManager manager1=DbManager.CreateDbManager(); DbManager manager2=DbManager.CreateDbManager(); Console.WriteLine("manager1 1 Id = {0} and manager2 2 Id = {1}",manager1.Id,manager2.Id); if(manager1.Id==manager2.Id) Console.WriteLine("YEP ! Singleton Pattern Succesfully used"); else Console.WriteLine("There is a problem. Contact with me ."); }
Evet arkadaşlar en çok duyduğunuz patternlerden birini anlatmaya, örneklendirmeye çalıştım. Umarım faydalı olmuştur. Herkese iyi bayramlar dilerim, kalın sağlıcakla 😀
Kaynak Kod => https://github.com/EnesAys/DesignPatterns
Kaynaklar
https://www.turkayurkmez.com/singleton-design-pattern/
https://www.dofactory.com/net/singleton-design-pattern
http://www.csharpnedir.com/articles/read/?id=134