Bonjour à tous,
avant de demander humblement la publication d'un mini article je vous sollicite pour vos impressions sur ceci :
Le design pattern singleton en WD Langage :
Ce Pattern est peut-être le premier pattern que j'ai appris en POO
Car c'est un des plus simples à comprendre.
Il s'agit comme le dit très bien wotre cyber encyclopédie préférée de créer une classe dont on ne peut implémenter d'un seul et unique objet (attention quand même en multi-thread.
Le but de l'article n'est pas de théoriser ce pattern mais de le traduire en WDlanguage en voici la recette :
On crée un projet (sans base de donnée) pour aller plus vite le projet en ZIP version 17 est en pièce jointe.
Dans ce projet une fenêtre
Dans cette fenêtre un champ de saisie "saisie"
Un bouton "Voir"
Un bouton "Ajouter+1"
On crée une classe Singleton (original non?)
Voici la déclaration :
1 2 3 4 5 6
|
Singleton est une classe
membre est un entier
GLOBAL
single est un Singleton dynamique
FIN |
single est mon instance, elle figure dans la déclaration en global c'est le point le plus important de cette classe avec le fait que le constructeur soit privé :
1 2
|
PROCEDURE PRIVÉ GLOBAL Constructeur() |
Mettre le constructeur privé va interdire l'instanciation d'un objet en dehors de la classe et on évite d'avoir plusieurs instances grace à la méthode getInstance() dont voici le code :
1 2 3 4 5 6 7
|
PROCEDURE GLOBAL getInstance()
SI ::single=Null ALORS
::single=allouer un Singleton
SINON
FIN
RENVOYER ::single |
On comprends bien alors que si un objet singleton existe déjà on le renvoi au lieu de recréer une instance. Tous les appels à l'objet se font donc via cette méthode.
Pour accéder au membre "membre" on écrit : Singleton.getInstance().membre
sans avoir ni a déclarer ni a allouer l'objet.
Du coup dans le code du projet on ne met RIEN
Dans le code de "saisie" on ne met RIEN
Dans le code "clic" du bouton "Voir" on écrit :
Saisie1=Singleton.getInstance().membre
et dans celui du bouton "Ajouter+1"
Singleton.getInstance().membre++
A chaque clic sur "voir" on récupère la valeur de "membre"
A chaque clic sur "Ajouter" on incrémente "membre"
Alors très bien me direz vous, très joli mais à quoi ça va me servir ?
Dans pas mal de langages on utilise le pattern singleton pour limiter les objets de connexion à la base de donnée à une seule instance.
Dans Windev c'est rarement le cas car en général on utilise un objet Connexion qui existe par défaut dans votre analyse.
On peut envisager d'utiliser ce pattern si on utilise une base externe sans analyse avec un objet de connexion qu'on rappelle souvent.
Personnellement une autre de mes utilisations régulières est dans la gestion des fichiers de log. J'écris un objet Journal qui utilise ce pattern avec une méthode "ecritLigne"
et je lance facilement des appels du type :
Journal.getInstance().ecritLigne("cette opération .....")
Sans avoir à me soucier des déclarations.
Voilà j'attends vos réactions pour les modifications.
Merci d'avance
Dans le projet
Partager