Design Patterns

Last Updated: 9/3/2024

Singleton Pattern

  • Use singleton to ensure a class has a single instance

Classic Structure

Singleton Classic Structure

Scenario

  • Class for managing the configuration settings of application. Store application settings in 1 object

Problem

public class ConfigManager
{
    Dictionary<string, object> settings = new Dictionary<string, object>();

    public void Set(string key, object value)
    {
        settings[key] = value;
    }

    public object Get(string key)
    {
        return settings[key];
    }
}

public class Program
{
    static void Main(string[] args)
    {
        ConfigManager configManager1 = new ConfigManager();
        configManager1.Set("name", "gof");

        ConfigManager configManager2 = new ConfigManager();
        Console.WriteLine(configManager2.Get("name")); //output - null
    }
}
  • Each object has its own data
  • Data should be stored in single object. You can't have multiple objects to store application settings

Solution

public class ConfigManager
{
    Dictionary<string, object> settings = new Dictionary<string, object>();
    private static ConfigManager instance = new ConfigManager();

    private ConfigManager() { }

    public static ConfigManager getInstance() { return instance; }

    public void Set(string key, object value)
    {
        settings[key] = value;
    }

    public object Get(string key)
    {
        return settings[key];
    }
}

public class Program
{
    static void Main(string[] args)
    {
        // Singleton Solution Code
        ConfigManager configManager1 = ConfigManager.getInstance();
        configManager1.Set("name", "gof");

        ConfigManager configManager2 = ConfigManager.getInstance();
        Console.WriteLine(configManager2.Get("name"));
    }
}

Example Structure

Singleton Example Structure

Example Code