1. Qu’est-ce que c’est ?

Le singleton est un design pattern de création très connu et facile à utiliser dont le but est de restreindre l’instanciation d’une classe à un seul et unique objet, qui sera accessible pendant toute la durée de l’application.

2. A quoi ca sert ?

Il permet de s’assurer de l’unicité d’une instance, en la créant si elle n’existe pas, sinon renvoi une référence vers l’objet qui existe déjà.

Ce pattern peut s’appliquer dans des cas comme :

  • Le maintien d’une connexion à une base de données
  • Le maintien d’un objet gérant des données globales
  • Le maintien de mises à jour vers un seul et même fichier.

3. Structure

Le singleton est constitué de 2 éléments :

  • une instance statique définit en accès privé afin d’en interdire l’appel depuis l’extérieur,
  • une méthode d’appel de l’instance qui à pour fonction de retourner l’objet existant ou de le créer si ce dernier n’existe pas.
public class Singleton
{

	private static var _instance:Singleton = null;

	public function getInstance():Singleton
	{
		if ( !instanceExist() ) {
			_instance= new Singleton();
		}
		return _instance;
	}

    public static function instanceExist():Boolean
	{
        return (_instance != null);
	}

	public function Singleton()
	{

	}

}

L’appel de l’instance s’effectue via la méthode getInstance().

4. Exemple

public class Singleton
{
	private static var _instance:Singleton = null;

	public var data:Number = 10;
	public var label:String = "Exemple Pattern Singleton";

	public function getInstance():Singleton
	{
		if ( !instanceExist() ) {
			_instance= new Singleton();
		}
		return _instance;
	}

	public static function instanceExist():Boolean
	{
		return (_instance != null);
	}

	public function Singleton()
	{

	}
}

var s1:Singleton = Singleton.getInstance();
trace(s.data, s.label);
//Renvoi : 10, Exemple Pattern Singleton

var s2:Singleton = Singleton.getInstance();
s2.data = 1250;
s2.label = "Nouveau libellé de la classe Singleton";

trace(s2.data, s2.label);
//Renvoi : 1250, Nouveau libellé de la classe Singleton

trace(s.data, s.label);
//Renvoi : 1250, Nouveau libellé de la classe Singleton

0 commentaire pour le moment

  • Il n'y a pas encore de commentaire mais le formulaire ci dessous vous tend les bras....

Laisser un commentaire