Singleton kalıbını doğru bir şekilde kullanmıyorsanız class içerisinden sadece static method çağırsanız bile instance yaratmış olabilirsiniz. Belki de hiç kullanmayacağınız bu instance bellekte boşu boşuna yer işgal eder. Bu sorunu Singleton kalıbını lazy olarak tasarlarsanız aşabilirsiniz. Aşağıdaki gibi bir kullanımda construtorlara breakpoint koyup Singleton class'ı içerisinden MyMethod1()'i çağırdığınızda instance yaratılmadığını ancak metodun çağırılabilir olduğunu göreceksiniz. Instance sadece gerektiğinde oluşturuluyor.
public sealed class Singleton
{
Singleton()
{
Console.WriteLine("Singleton contructor çalıştı.");
}
public
static Singleton Instance
{
get
{
return Nested.instance;
}
}
public
static void MyMethod1()
{
Console.WriteLine("MyMethod1 çalıştı..");
}
public void MyMethod2()
{
Console.WriteLine("MyMethod2 çalıştı..");
}
class Nested
{
static Nested()
{
instance = new Singleton();
Console.WriteLine("Nested constructor çalıştı");
}
internal static readonly Singleton instance;
}
}