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.