Singleton patterni ile bir nesnenin çalışma zamanında tek olmasını garanti edebiliriz. Böyle söyleyince kafamızda bir şeyler canlanmadıysa daha somut örnekler veriyim. Örneğin;
- veritabanı kullandığımız uygulamalarımızda connectionString bilgisini okumak için kullanabiliriz.
- Projemizdeki konfigürasyon bilgilerini okumak için de kullanabiliriz.
İmplementasyonu çok basit. Aşağıdaki UML şemamızı inceleyerek işe başlayalım.
- Singleton isimli bir class oluşturduk.
- Bu class’ın constructorını private olarak tanımlıyoruz. Bunun sebebi ise herkes Singleton singleton=new Singleton() şeklinde belleğe yeni bir nesne yaratmasını engellemek.
- Yine private olarak Singleton tipinde bir _instance yaratıyoruz.
- Bu nesneye ulaşmak için ReturnInstance tipinde public bir metot yazıyoruz.
class Singleton { private static Singleton _instanceSingleton; private Singleton() { } public static Singleton ReturnInstance() { if (_instanceSingleton == null) _instanceSingleton = new Singleton(); return _instanceSingleton; } }
Bu şekilde classımız yazmış olduk. Ama asenkron işlemlerde kullanmak istersek bu metodumuzu thread safe hale getirmeliyiz. Bunu da lock koyarak halledebiliriz.
class Singleton { private static Singleton _instanceSingleton; private static object _threadSafeObject=new object(); private Singleton() { } public static Singleton ReturnInstance() { if (_instanceSingleton == null) { lock(_threadSafeObject) { if (_instanceSingleton == null) _instanceSingleton = new Singleton(); } } return _instanceSingleton; } }
Bir yanıt yazın