|
Design Pattern - 01/24 - Singleton
Crée le : 20/01/2011
|
Modifié le : 30/01/2011
|
Par : Proteus
|
Vue : 141
|
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. |
||||