IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Implémentation des design patterns en pascal


précédentsommaire

III. Design pattern singleton

Le motif de conception singleton permet de définir une classe pour qu'il ne puisse avoir qu'une seule instance de cette classe.
Une exemple d'un singleton peut être l'objet Application en Lazarus qui contient les paramètres et les méthodes de systemes d'une application, ou encore une Classe System qui contiendrait les détails de l'environnement de travail Linux par exemple. Vous conviendrez avec moi, qu'il ne doit pas existant plusieurs instance d'objet System puisque l'environnement de travail en unique en soit.

III-A. Implémentation

L'implémentation la plus simple serait d'avoir une méthode static dans la classe qui contient l'instance de l'objet crée

 
Sélectionnez
Unit USingleton;

Interface
 Type
 
  TSingleton : class
               begin
                private TSingleton instance; static;
                
                private constructor create();
                public class function getInstance() : TSingleton;
               end;
               
Implementation

constructor TSingleton.create();
begin
end;

class function TSingleton.getInstance() : TSingleton;
begin
 if(instance == null)
  instance := TSingleton.create();
 
  result := instance;
end;

End.

L'attribut instance étant statique, il n'est donc pas lié une instance de classe mais à la classe elle même. Nous pouvons alors, verifier lors de l'appel de la méthode de classe -classe statique- qu'il n'existe qu'une seule instance de la classe TSingleton à chaque fois.
En mettant le constructeur de lasse private, il ne sera donc pas possible de contruire directement un objet de cette classe sans passer par le méthode getInstance().
Nous pouvons alors obtenir l'instance de la classe TSingleton par :

 
Sélectionnez
var singleton : TSingleton;
singleton := TSingleton.getInstance();

III-B. Mauvaise pratique

Très souvent en pascal, on peut voir une implémentation du design pattern Singleton de la maniere suivante :

 
Sélectionnez
Type
TMauvaseParique : class
                  begin
	                { ... }
	              end;

var	Application : TMauvaseParique;

implemenation
Begin
 Application = TMauvaseParique.create();
End.

Puis par convention, nous pouvons nous dire qu'il ne faudra pas qu'un développeur instantie un autre objet de la classe TMauvaseParique, mais qu'il faut utiliser l'objet referencié par la variable Applcation.
Ce cas résulte avant tout d'une erreur de conception si on tient compte des possibilités que nous offre le langage Pascal.


précédentsommaire

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 kpizingui darryl. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.