Singleton Design Pattern
http://www.oodesign.com/singleton-pattern.html
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: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