using System;
namespace DesignPatters.Singleton
{
public class Singleton
{
public static Singleton Instance()
{
if (_instance == null)
{
lock (typeof(Singleton))
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
public int NextValue()
{
return ++count;
}
protected Singleton(){}
private static volatile Singleton _instance = null;
private int count = 0;
}
public class MainClient
{
[STAThread]
static void Main()
{
Singleton sg1 = Singleton.Instance();
for (int i = 0; i < 20; i++)
Console.WriteLine("Next Value: {0}",
sg1.NextValue() + " - sg1");
Singleton sg2 = Singleton.Instance();
Console.WriteLine("Next Value: {0}",
sg2.NextValue() + " - sg2");
}
}
}