Une classe « singleton »
241
• fournir en résultat la référence de cet objet unique, et ceci aussi bien pour le premier appel
que pour les suivants.
On voit que la méthode créeInstance ne peut être qu’une méthode de classe puisqu’on ne
peut pas l’appliquer à un objet existant. D’autre part, la référence de l’instance unique devra
être conservée dans un attribut de type Singleton. Cet attribut devra être accessible à la
méthode de classe créeInstance ; il devra donc s’agir d’un attribut de classe.
Voici ce que pourrait être le « canevas » de notre classe :
classe Singleton
{ Singleton méthode deClasse créeInstance
{ // crée une instance (Création Singleton) s’il y a lieu, de référence s
retourne s
// fournit la référence de l’instance unique
}
// autres méthodes de la classe
Singleton deClasse s
// référence à l’unique objet instancié
// autres attributs de la classe
}
Pour interdire l’instanciation directe par le programme, il ne suffit pas de ne pas prévoir de
constructeur pour cette classe Singleton (revoyez éventuellement les règles concernant
l’appel des constructeurs au paragraphe 5.4 du chapitre 9, page 191). Il faut (artificiellement)
la doter d’au moins un constructeur privé, dont la seule existence interdira l’instanciation
directe d’un objet. Ce constructeur pourra éventuellement être vide ou, s’il possède un intérêt, être utilisé par la méthode créeInstance.
Enfin, pour gérer convenablement l’unicité de l’instance, nous utilisons un attribut de classe
nommé créé, de type booléen, initialisé à faux, et mis à vrai dès qu’un objet a été instancié, afin de ne plus en créer d’autres. Rappelons qu’ici, nous avons convenu que tout
appel, à partir du second, de la méthode CréeInstance, renvoie la référence à l’objet déjà
créé. Voici ce que pourrait être le schéma de notre classe :
classe Singleton
{ privé méthode Singleton
// constructeur privé
{ // initialisation des attributs
}
Singleton méthode deClasse créeInstance
{ si non créé alors { s := Création Singleton
créé := vrai
}
retourne s
}
// autres méthodes de la classe
Singleton deClasse s
// référence à l’unique objet instancié
booléen deClasse créé := faux
// autres attributs de la classe
}
241
• fournir en résultat la référence de cet objet unique, et ceci aussi bien pour le premier appel
que pour les suivants.
On voit que la méthode créeInstance ne peut être qu’une méthode de classe puisqu’on ne
peut pas l’appliquer à un objet existant. D’autre part, la référence de l’instance unique devra
être conservée dans un attribut de type Singleton. Cet attribut devra être accessible à la
méthode de classe créeInstance ; il devra donc s’agir d’un attribut de classe.
Voici ce que pourrait être le « canevas » de notre classe :
classe Singleton
{ Singleton méthode deClasse créeInstance
{ // crée une instance (Création Singleton) s’il y a lieu, de référence s
retourne s
// fournit la référence de l’instance unique
}
// autres méthodes de la classe
Singleton deClasse s
// référence à l’unique objet instancié
// autres attributs de la classe
}
Pour interdire l’instanciation directe par le programme, il ne suffit pas de ne pas prévoir de
constructeur pour cette classe Singleton (revoyez éventuellement les règles concernant
l’appel des constructeurs au paragraphe 5.4 du chapitre 9, page 191). Il faut (artificiellement)
la doter d’au moins un constructeur privé, dont la seule existence interdira l’instanciation
directe d’un objet. Ce constructeur pourra éventuellement être vide ou, s’il possède un intérêt, être utilisé par la méthode créeInstance.
Enfin, pour gérer convenablement l’unicité de l’instance, nous utilisons un attribut de classe
nommé créé, de type booléen, initialisé à faux, et mis à vrai dès qu’un objet a été instancié, afin de ne plus en créer d’autres. Rappelons qu’ici, nous avons convenu que tout
appel, à partir du second, de la méthode CréeInstance, renvoie la référence à l’objet déjà
créé. Voici ce que pourrait être le schéma de notre classe :
classe Singleton
{ privé méthode Singleton
// constructeur privé
{ // initialisation des attributs
}
Singleton méthode deClasse créeInstance
{ si non créé alors { s := Création Singleton
créé := vrai
}
retourne s
}
// autres méthodes de la classe
Singleton deClasse s
// référence à l’unique objet instancié
booléen deClasse créé := faux
// autres attributs de la classe
}
