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