SINGLETON en as3

Pour implémenter le pattern singleton en action script on se heurte rapidement à une limitation du langage: on ne peut pas rendre un constructeur privé or il s’agit de la base du pattern. En regardant sur internet on trouve plusieurs solutions plus ou moins évoluées qui permettent de protéger l’usage du constructeur. Souvent une exception est levée si le constructeur n’est pas invoqué par la méthode static getInstance. L’inconvénient de cette approche est que l’erreur est visible uniquement à l’exécution et non à la compilation. Dans le livre « ActionScript 3.0 Design Patterns » l’auteur propose une autre approche.

Le principe est d’utiliser une classe privée décrite dans notre classe Singleton mais à l’extérieure du package:


package
{
public class Singleton
{
private static var _instance:Singleton;
public function Singleton(pvt:PrivateClass){
}
public static function getInstance():Singleton
{
if(Singleton._instance==null){
Singleton._instance=new Singleton(new PrivateClass()};
}
return Singleton._instance;
}
}
}
//END OF PACKAGE
//Private class
class PrivateClass
{
public function PrivateClass(){}
}

L’avantage est que la classe privée utilisée dans le constructeur n’est visible que dans le classe Singleton car elle est définit hors du package.
En effet le code suivant dans une autre classe provoque une erreur à la compilation


Singleton s=new Singleton(new PrivateClass())};

Voila une façon élégante d’implémenter ce pattern.