3.32. The Single Instance Object

Problem

You have a data type that will be used by several clients. This data type will create and hold a reference to another object that takes a long time to create; this could be a database connection or an object that is made up of many internal objects, which also must be created along with their containing object. Rather than allow this data type to be instantiated many times by many different clients, you would rather have a single object that is instantiated only one time and used by everyone.

Solution

The following two code examples illustrate the two singleton design patterns. The first design always returns the same instance of the OnlyOne class through its GetInstance method:

public sealed class OnlyOne
{
    private OnlyOne( ) {}

    private static OnlyOne theOneObject = null;

    public static OnlyOne GetInstance( )
    {
        lock (typeof(OnlyOne))
        {
            if (theOneObject == null)
            {
                OnlyOne.theOneObject = new OnlyOne( );
            }

            return (OnlyOne.theOneObject);
        }
    }

    public void Method1( ) {}
    public void Method2( ) {} 
}

The second design uses only static members to implement the singleton design pattern:

public sealed class OnlyStaticOne
{
    private OnlyStaticOne( ) {}

    // Use a static constructor to initialize the singleton
    static OnlyStaticOne( ) {}

    public static void Method1( ) {}
    public static void Method2( ) {}
}

Discussion

The singleton design pattern allows one and only one instance of a class to exist in memory at any one time. Singleton classes are useful when you ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.