Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

8 septembre 2007 6 08 /09 /septembre /2007 10:01
[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();
        }
    }
 

Partager cet article

Repost 0
Published by Romagny13 - dans Design patterns
commenter cet article

commentaires