Thursday, 26 December 2013

Singleton Design Pattern

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:
The classes, and objects in the above UML class diagram are as follows:
  1. 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:
  1. 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?

  1. Exactly one instance of a class is required.
  2. Controlled access to a single object is necessary.

No comments:

Post a Comment