Design Patterns en AS3 #1 Singleton

Cet article sera le premier d’une série de sept articles traitant de l’implémentation des principaux design pattern en Action Script 3.

AS3 est un langage permettant de réaliser des applications hybrides mobiles via Adobe AIR. Le système Adobe AIR permettant aux développeurs d’intégrer le même code dans des applications et jeux natifs pour les ordinateurs de bureau Windows et Mac OS, et également pour les périphériques iOS et Android. Ce langage est un bon moyen de s’initier aux patrons de conception et aux paradigmes objets car il est strict en termes de syntaxes et d’architecture. Ces articles comportent une présentation théorique et un exemple pratique.

Aujourd’hui le Singleton

Le singleton est le design pattern le plus simple à mettre en place. Le but est de restreindre l’instanciation d’une classe à un seul objet (ou bien à quelques objets seulement). Il est utilisé lorsque l’on a besoin d’exactement un objet pour coordonner des opérations dans un système. Il sera surtout utilisé pour un contrôleur présent dans un MVC (Modèle Vue Contrôleur) qui sera compose d’autres objets de contrôleurs. Le modèle est parfois utilisé pour son efficacité, lorsque le système est plus rapide ou occupe moins de mémoire avec peu d’objets qu’avec beaucoup d’objets similaires. On implémente le singleton en écrivant une classe qui possèdera une méthode créant une instance uniquement s’il n’en existe pas encore. Sinon elle renvoie une référence vers l’objet qui existe déjà. Le singleton doit être implémenté avec précaution dans les applications multithreads. Si deux threads exécutent en même temps la méthode de création alors que l’objet unique n’existe pas encore, il faut absolument s’assurer qu’un seul créera l’objet, et que l’autre obtiendra une référence vers ce nouvel objet. La solution classique à ce problème consiste à utiliser l’exclusion mutuelle pour indiquer que l’objet est en cours d’instanciation. Voici un exemple d’implémentation :

package
{
            public class example

            {

// on définit une variable statique Booléenne permettant de savoir si l'objet est créé

                        private static var _fromGetInstance:Boolean = false;

// c'est l'objet en lui-même, il est statique et private pour que seule la classe puisse y accéder

                        private static var _uniqueInstance:example;

// méthode d'accès à l'objet du singleton, il peut être remplacé par un getter qui sera lui aussi en public static. // la méthode retourne l'objet et vérifie sa disponibilité

                        public static function getInstance():LoadingModal

                        {

                                   if(! _uniqueInstance)

                                   {

                                               _fromGetInstance = true;

                                               _uniqueInstance = new LoadingModal();

                                   }

                                   return _uniqueInstance;

                        }

// constructeur de la classe // on ne peut pas créer de nouveaux objets par le constructeur sinon cela renvoie une erreur

                        public function example()

                        {

                                   if(!_fromGetInstance)

                                   {

                                               throw new Error("interdit");

                                   }

                                   _fromGetInstance = false;

                        }

            }

}

  Auteur : Eric Duport, Ingénieur Concepteur Développeur à SQLI Lyon