Overblog Tous les blogs Top blogs Économie, Finance & Droit Tous les blogs Économie, Finance & Droit
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions

Publicité

[Design Patterns] Singleton – toutes ses déclinaisons

[Design Patterns] Singleton – toutes ses déclinaisons
1 – Singleton de base
A - Lazy initialization
    public class Singleton
    {
        private static Singleton uniqueInstance;
        //autres variables
 
        private Singleton()
        { }
 
        public static Singleton GetInstance()
        {
            if (uniqueInstance == null)
                uniqueInstance = new Singleton();
 
            return uniqueInstance;
        }
 
        //autres méthodes
    }

B - Full initialization
    public class Singleton
    {
        private static readonly Singleton uniqueInstance = new Singleton();
        //autres variables
 
        private Singleton()
        { }
 
        public static Singleton GetInstance()
        {
            return uniqueInstance;
        }
 
        //autres méthodes
    }
 
2 – Sous singleton  
 Il est possible de créer un sous singleton héritant du singleton de base 
Note : dans ce cas le constructeur de la classe de base(c'est à dire de Singleton) doit avoir une portée Protected
    public class SousSingleton : Singleton
    {
        //autres variables
 
        private SousSingleton()
            : base()
        {
        }
 
        //autres méthodes
    }
 
3 – Singleton threadSafe
pour éviter que plusieurs threads utilisent le même singleton en même temps, on « lock » celui-ci le temps qu’il est utilisé
public class Singleton
    {
        private static Singleton uniqueInstance = null;
        private static readonly object uniqueInstanceLocker = new object();
 
 
        // constructeur Private
        private Singleton()
        { }
 
        // méthode permettant de récupérer l'uniqueinstance est static
        public static Singleton GetInstance()
        {
            lock (uniqueInstanceLocker)
            {
                if (uniqueInstance == null)
                    uniqueInstance = new Singleton();
 
                return uniqueInstance;
            }
 
        }
    }
 
Utilisations
class Program
    {
        static void Main(string[] args)
        {
            Singleton singleton = Singleton.GetInstance();
            Singleton sousSingleton = SousSingleton.GetInstance();
        }
    }
 
Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article