utorok, 01 november 2016 08:47

C# - Implementácia Singleton Patternu

Written by 
Rate this item
(1 Vote)

Singleton je jedným z najznámejších návrhových vzorov. Singleton je trieda, ktorá dovoli vytvoriť iba jednu inštanciu samej seba. Využijeme ho pri riešení problémov, kedy je potrebné, aby v celom programe bežala iba jedna inštancia triedy. Poskytne k nej globálny prístupový bod.

Kód v c# (not thread-safe):

// Bad code! Do not use!
public sealed class Singleton
{
    private static Singleton instance=null;

    private Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            if (instance==null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
} 

Kód v c# (simple thread-safety):

public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
}

Kód v c# (thread-safety using double-check locking):

public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
} 

 

Kód v c# (Using .NET 4's Lazy type):

 

public sealed class Singleton
{
    private Singleton()
    {

    }

    private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton());

    public static Singleton Instance
    {
        get
        {
            return lazy.Value;
        }
    }
}

 

 

Read 628 times Last modified on utorok, 01 november 2016 09:21
Ing.Jaroslav Vadel

Som zakladateľom www.projectik.eu.

Hram sa na programatora, ktory ovlada c#,cpp,java,unity3d,php,html,NI testand... ..."Naprogramovat program,ktory funguje vie kazdy. Ale to,ze program funguje este neznamena,ze je napisany spravne "..

Website: www.projectik.eu