Singleton Pattern

Een singleton Pattern is een class die slechts een keer ge-instantieerd wordt.

Met een static property van de class kan eerst gecontroleerd worden of het object al geinitieerd is en zoja dan retourneert hij deze instance en anders vult hij de private object alsnog met een nieuwe instance. Op deze manier is er altijd maar 1 object van de class beschikbaar.

Voorbeeld code:

 public class SingletonDataClass 
{ 
    private static SingletonDataClass singletondataclass = null; 
    public static SingletonDataClass GetInstance 
    { 
        get { 
            if (singletondataclass == null) 
            { 
                singletondataclass = new SingletonDataClass(); 
            } 
       return singletondataclass; 
        } 
    } 
} 

Let op dat je de contstructor van de class wel private maakt. Zonder een private constructor of zonder een constructor is het nog steeds mogelijk om een nieuwe versie van de class te instantieren. Dat is dus niet de bedoeling.

Singleton en threading:

Als je deze class gebruikt gaat worden in een omgeving met meerdere threads maakt hij voor elke thread een nieuwe class aan. Dat is dus niet de bedoeling van de singleton pattern en is snel op te lossen door de class aan te vullen met een static contructor. De compiler execute namelijk de static contstructor wanneer de class wordt geiniteerd of wanneer er naar een static member van de class wordt gerefeerd, en doet dit slechts 1 keer per app_domain. Op deze manier wordt er slechts 1 instantie van de class gecre-eerd in de verschillende threads.

Handig voor config of settings classes, voorbeeldje:

 public class SingletonDataClass 
{ 

    static SingletonDataClass(){}

    private static SingletonDataClass singletondataclass = null;
 
    public static SingletonDataClass GetInstance 
    { 
        get { 
            if (singletondataclass == null) 
            { 
                singletondataclass = new SingletonDataClass(); 
            } 
       return singletondataclass; 
        } 
    } 
}

{{opmerking.Naam}}:

{{opmerking.OpmerkingText}}

            

Saving your comment....

Naam is verplicht!
Email is verplicht!
Opmerking is verplicht!