Posted By : Shailendra Chauhan, 08 Jun 2013
Updated On : 18 Aug 2013
Total Views : 56,436
Version Support : All C# & .Net
Singleton pattern falls under Creational Pattern of Gang of Four (GOF) Design Patterns in .Net. It is pattern is one of the simplest design patterns. This pattern ensures that a class has only one instance. In this article, I would like share what is Singleton pattern and how is it work?
What is Singleton Pattern?
Singleton 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.
Singleton Pattern - UML Diagram & Implementation
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:
Singleton
This is a class which is responsible for creating and maintaining its own unique instance.
C# - Implementation Code
//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;
}
}
}
}
Singleton Pattern - Example
Who is what?
The classes and objects in the above class diagram can be identified as follows:
Singleton - Singleton class
C# - Sample Code
/// <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();
}
}
Singleton Pattern Demo - Output
When to use it?
Exactly one instance of a class is required.
Controlled access to a single object is necessary.
What do you think?
I hope you will enjoy the Singleton Pattern while designing your software. I would like to have feedback from my blog readers. Your valuable feedback, question, or comments about this article are always welcome.