Singleton pattern falls under Creational Pattern of Gang of Four (GOF) Design Patterns in .Net. It is a pattern is one of the simplest design patterns. This pattern ensures that a class has only one instance. In this article, I would like to share what is Singleton pattern and how is it work?
Singleton Design pattern is one of the simplest design patterns. This pattern ensures that a class has only one instance and provides a global point of access to it.
The UML class diagram for the implementation of the Singleton design pattern is given below:

The classes, and objects in the above UML class diagram are as follows:
This is a class which is responsible for creating and maintaining its own unique instance.
//eager initialization of singleton
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton() { }
public static Singleton GetInstance
{
get
{
return instance;
}
}
}
////lazy initialization of singleton
public class Singleton
{
private static Singleton instance = null;
private Singleton() { }
public static Singleton GetInstance
{
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
}
////Thread-safe (Double-checked Locking) initialization of singleton
public class Singleton
{
private static Singleton instance = null;
private Singleton() { }
private static object lockThis = new object();
public static Singleton GetInstance
{
get
{
lock (lockThis)
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
}
}

The classes and objects in the above class diagram can be identified as follows:
Singleton - Singleton class
/// <summary>
/// The 'Singleton' class
/// </summary>
public class Singleton
{
// .NET guarantees thread safety for static initialization
private static Singleton instance = null;
private string Name{get;set;}
private string IP{get;set;}
private Singleton()
{
//To DO: Remove below line
Console.WriteLine("Singleton Intance");
Name = "Server1";
IP = "192.168.1.23";
}
// Lock synchronization object
private static object syncLock = new object();
public static Singleton Instance
{
get
{
// Support multithreaded applications through
// 'Double checked locking' pattern which (once
// the instance exists) avoids locking each
// time the method is invoked
lock (syncLock)
{
if (Singleton.instance == null)
Singleton.instance = new Singleton();
return Singleton.instance;
}
}
}
public void Show()
{
Console.WriteLine("Server Information is : Name={0} & IP={1}", IP, Name);
}
}
/// <summary>
/// Singleton Pattern Demo
/// </summary>
///
class Program
{
static void Main(string[] args)
{
Singleton.Instance.Show();
Singleton.Instance.Show();
Console.ReadKey();
}
}
Exactly one instance of a class is required.
Controlled access to a single object is necessary.