Geçenlerde bir projem için Singleton tasarım deseni hazırlamam gerekiyordu fakat singleton benim için tam da yeterli olmayacaktı.Çünkü proje oldukça büyük ve her an onlarca nesne örneği oluşturan ve aynı nesne örneğini farklı şekillerde oluşturan bir projeydi.Aynı nesne örneği farklı şekillerde farklı contructor lar ile oluşturulduğundan Singleton Design Pattern tek başıma işimi görmeyecekti.
Bunun üzerine işe koyuldum ve biraz araştırma birazda çalışma sonrası Factory Singleton Design Pattern kullanarak problemimi kalıcı ve etkili bir şekilde çözmüş oldum.
Factory Singleton Design Pattern ımın kodları aşağıdaki gibi :
public static class SingletonFactory
{
private static readonly IDictionary<Type, object> instances;
static DBBaseSingletonFactory()
{
instances = new Dictionary<Type, object>();
}
public static T Create<T>(params object[] args)
{
Type instanceType = typeof(T);
T instance;
if (instances.ContainsKey(instanceType))
{
instance = (T)instances[instanceType];
}
else
{
instance = (T)Activator.CreateInstance(instanceType, args);
instances.Add(instanceType, instance);
}
return instance;
}//End method
}
Örnek Kullanımı aşağıdaki gibi oluyor.
Aşağıdaki örnekte veri katmanındaki DBProduct nesnesi oluşturuluyor.
DBProduct menu = SingletonFactory.Create<DBProduct>();
Bunun üzerine işe koyuldum ve biraz araştırma birazda çalışma sonrası Factory Singleton Design Pattern kullanarak problemimi kalıcı ve etkili bir şekilde çözmüş oldum.
Factory Singleton Design Pattern ımın kodları aşağıdaki gibi :
public static class SingletonFactory
{
private static readonly IDictionary<Type, object> instances;
static DBBaseSingletonFactory()
{
instances = new Dictionary<Type, object>();
}
public static T Create<T>(params object[] args)
{
Type instanceType = typeof(T);
T instance;
if (instances.ContainsKey(instanceType))
{
instance = (T)instances[instanceType];
}
else
{
instance = (T)Activator.CreateInstance(instanceType, args);
instances.Add(instanceType, instance);
}
return instance;
}//End method
}
Örnek Kullanımı aşağıdaki gibi oluyor.
Aşağıdaki örnekte veri katmanındaki DBProduct nesnesi oluşturuluyor.
DBProduct menu = SingletonFactory.Create<DBProduct>();