Singleton Design Pattern - C#
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.
No comments:
Post a Comment