Deux fois par mois, nous revoyons certains des articles préférés de nos lecteurs dans l’histoire d’Activetuts +. Le petit conseil rétroactif de cette semaine, publié pour la première fois en juin 2010, est une introduction à un modèle de conception populaire (mais couramment mal utilisé)..
Dans ce petit conseil, nous allons parler du modèle de conception Singleton et de la manière dont il peut vous aider à optimiser votre code lorsque vous avez besoin d'une seule instance de classe..
En tant que programmeur, vous devez savoir qu'il existe des cas où vous souhaitez utiliser une instance d'une classe, mais que vous souhaitez en créer une seule et la conserver tout au long du programme. Eh bien, c'est ce que sont Singletons.
Un singleton est un modèle de conception orienté objet utilisé par de nombreux programmeurs; cela vous permet de créer une sorte d'instance "globale" d'une classe. Il est créé de telle sorte qu'il ne puisse exister qu'une seule instance unique, de sorte que toutes les instances de cette classe soient exactement dans le même état..
L’exemple le plus courant serait un score - par exemple un score de football. Vous auriez un But classe, avec propriétés homeTeamScore et awayTeamScore et une méthode comme augmentationScore (équipe: équipe).
Les deux équipes doivent pouvoir augmenter leur score lorsqu'elles marquent un but, mais vous ne pouvez pas donner à chaque équipe sa propre instance de score. vous voulez que les deux accèdent et modifient le même.
Dans ce cas, un Singleton est une solution parfaite, car il pourrait fonctionner comme une instance globale accessible à tous. vous n'aurez qu'une instance pour tout le monde, vous n'avez donc pas à craindre que chaque équipe modifie un score différent.
Commençons maintenant à créer un singleton dans AS3, mais souvenons-nous d’abord des éléments clés d’un singleton:
Créez une nouvelle classe AS3 et appelez-la Singleton.as.
(Vous n'êtes pas familier avec le codage basé sur les classes? Découvrez cette introduction rapide.)
Voici le code de base Singleton:
package classe publique Singleton instance de variable statique privée: Singleton; // Ce sera l'instance unique créée par la classe private static var isOkayToCreate: Boolean = false; // Cette variable nous aidera à déterminer si l'instance peut être créée. Fonction publique Singleton () // Si nous ne pouvons pas créer d'instance, générez une erreur afin qu'aucune instance ne soit créée si (! IsOkayToCreate) génère une nouvelle erreur (this + "est un singleton. Accès utilisant getInstance ()"); // Avec cette méthode, nous allons créer et accéder à l'instance de la méthode. Fonction statique publique getInstance (): Singleton // S'il n'y a pas d'instance, créez-la si (! Instance) // Autorisez la création de l'instance, et après sa création, arrêtez de créer plus isOkayToCreate = true; instance = new Singleton (); isOkayToCreate = false; trace ("instance singleton créée!"); instance de retour;
Maintenant, allons tester Singleton en créant d’abord un nouveau fichier Flash nommé Main.fla. Dans le panneau des propriétés, définissez également la classe sur Principale.
Créez une nouvelle classe nommée "Main" et créez une instance de Singleton en utilisant le constructeur:
package import flash.display.MovieClip; classe publique Main étend MovieClip fonction publique Main () var testSingleton: Singleton = new Singleton ();
Enregistrez-le et lancez-le, vous verrez qu'il génère une erreur nous invitant à utiliser la fonction getInstance () à la place, alors continuez comme suit:
package import flash.display.MovieClip; classe publique Main étend MovieClip fonction publique Main () var testSingleton: Singleton = Singleton.getInstance ();
Sauvegardez et exécutez-le, il n'y a pas d'erreur maintenant, et vous pouvez voir dans la console le texte "Instance Singleton créée!", Ce qui signifie qu'il a été créé avec succès.
Ainsi, lorsque vous utilisez une classe Singleton, vous ne pouvez pas utiliser nouveau Singleton (), vous devez utiliser Singleton.getInstance () au lieu.
Le Singleton n'est pas très utile à la minute. Ajoutons une propriété:
package classe publique Singleton instance de variable statique privée: Singleton; // Ce sera l'instance unique créée par la classe private static var isOkayToCreate: Boolean = false; // Cette variable nous aidera à déterminer si l'instance peut être créée // nouvel exemple de propriété: public var exampleProperty: String = "Ceci est un exemple"; fonction publique Singleton () // Si nous ne pouvons pas créer d'instance, génère une erreur afin qu'aucune instance ne soit créée si (! isOkayToCreate) renvoie une nouvelle erreur (this + "est un Singleton. Accès à l'aide de getInstance ()"); // Avec cette méthode, nous allons créer et accéder à l'instance de la méthode. Fonction statique publique getInstance (): Singleton // S'il n'y a pas d'instance, créez-la si (! Instance) // Autorisez la création de l'instance, et après sa création, arrêtez de créer plus isOkayToCreate = true; instance = new Singleton (); isOkayToCreate = false; trace ("instance singleton créée!"); instance de retour;
Maintenant en Main.as, vous pouvez accéder testSingleton.exampleProperty comme si c'était une classe normale. Essayez de le tracer.
Pour prouver que le singleton fait ce qu’il est supposé faire, créez un autre singleton et modifiez la propriété exemple de l’un d’eux:
package import flash.display.MovieClip; classe publique Main étend MovieClip fonction publique Main () var testSingleton: Singleton = Singleton.getInstance (); var anotherSingleton: Singleton = Singleton.getInstance (); anotherSingleton.exampleProperty = "Ceci est défini dans anotherSingleton"; trace (testSingleton.exampleProperty, anotherSingleton.exampleProperty);
Que penses-tu qu'il va se passer?
Cela fonctionne même si vous créez les variables Singleton dans différentes classes.
Le modèle singleton peut être utilisé sur n’importe quel code, et je le recommande vivement si vous envisagez d’utiliser une seule instance d’une classe, car elle vous en donne un meilleur contrôle. J'espère que vous avez aimé ce petit conseil, merci d'avoir lu!
Saludos -Eduardo