Design Pattern - 01/24 - Singleton

ImageCalendarCreation   Crée le : 20/01/2011 Calendar   Modifié le : 30/01/2011 ImageOwner   Par : Proteus ImageVisites   Vue : 141 CommentaireCount   Commentaire(s) : 0

Introduction


Dans la programmation orientée objet il est souvent difficile de savoir quelle instance de quel objet on est en train d’utiliser . Qui ne s’est pas déjà retrouvé avec du code dans lequel on avait deux instances du même objet ? Sans entrer dans les problématiques de surconsommation de la mémoire on peut simplement parler de simplicité d’utilisation d’un objet. Pouvoir faire confiance à son code et se dire que dans n’importe quelle situation il retournera toujours la même instance de notre objet. Des cours sur le Singleton vous en trouverez des tas sur le net. Cependant je veux ce post pragmatique et que tous puissent l'appréhender et les ré utiliser.

Définition


Dans les grandes lignes implémenter un « Singleton » dans votre classe permet de vous assurer que peu importe d’où vous allez l’appeler dans votre application vous n’aurez qu’une seule instance de votre objet. Si vous instanciez votre classe et que vous modifiez les champs de cette classe. A la suite de cette action, vous recréez un deuxième objet, alors vous ne créerez pas une nouvelle instance de cette classe mais bien une connexion à l’objet sur laquelle vous avez déjà effectué des modifications de champs. Dans la plupart des cas il est utilisé pour s’assurer de l’unicité de l’instance de l’objet mais également pour éviter de passer en paramètre des variables d’une classe à l’autre (Globale).

Implémentation


Une classe qui implémente un Singleton, ne peux pas être instanciable par un « new ». Le constructeur de votre classe sera systématiquement « private ». Voici les lignes de codes que vous devez ajouter a votre code pour implémenter le Singleton.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DPSingleton
{
    public class Singleton
    {
        #region Variables
        private static Singleton instance;
        private string stringVar = "";
        private string stringArg1 = "";
        private string stringArg2 = "";
        private int intArg1 = 0;

        #endregion

        #region Proprietes
        public static Singleton InstanceProperty
        {
            get 
            {
                if (instance == null)
                    instance = new Singleton();
                return instance; 
            }
        }
        public string StringVar
        {
            get
            {
                return stringVar;
            }
            set
            {
                stringVar = value;
            }
        }
        public string StringArg1
        {
            get { return stringArg1; }
            set { stringArg1 = value; }
        }
        public string StringArg2
        {
            get { return stringArg2; }
            set { stringArg2 = value; }
        }
        public int IntArg1
        {
            get { return intArg1; }
            set { intArg1 = value; }
        }

        #endregion

        #region Constructeurs
        private Singleton()
        {
            
        }

        #endregion
    }
}
Comme vous le voyez tous les constructeurs sont « private » la classe ne peut pas être instanciée depuis l’extérieur. Pour créer une instance de l’objet il faut donc utiliser les différentes méthodes « static » ce sont elles qui créeront ou renverront l’instance de votre objet. A savoir qu’elles ne renverront une instance de votre objet que si la variable « static MyInstance » ne contient pas déjà une instance de votre objet. En ce qui concerne l’appel, comme nous l’avons il n’est pas possible d’instancier l’objet depuis l’extérieur, pour créer une instance de la classe vous allez utiliser :
Singleton singleton = Singleton.InstanceProperty;

Conclusion


J’espère avoir été clair au cours de cette explication. Il s’agit ici du design pattern le plus simple à utiliser mais il est surtout incontournable. Vous en aurez tous besoin un jour ou l’autre. S’il y a des points que vous souhaitez éclaircir, n’hésitez pas à laisser un commentaire. D’autres Design Pattern viendront s’ajouter a celui-ci, je vous laisse choisir le prochain. Merci pour votre lecture.

Editer le Message Supprimer le Message ContactMe   Contactez-moi


Laisser un commentaire