Design Pattern Singleton - How To

Un singleton est une classe à partir de laquelle on ne peut créer qu'une seule et unique instance.
Ce pattern permet la réutilisation d'une instance unique d'une même classe effectuant généralement les mêmes traitements.
Cela permet d'éviter une consommation en mémoire de multiples instances inutiles.


Il existe plusieurs manières d'implémenter un singleton :


Dans le cas d'applications multithread, cette implémentation que nous venons de voir n'est pas du tout thread-safe. Si deux thread accèdent en même temps à la méthode getInstance(), il peut en résulter 2 instances !

Voici une version thread-safe assurant l'unicité du singleton :


Le mot clé "lock" permet de délimiter une "section critique".
On appelle section critique une série d'instructions ne pouvant être exécutée par un seul thread.

Ainsi, la méthode getInstance() est synchronisée lors des appels concurrentiels des threads.

A vrai dire, on peut se passer de la synchronisation la méthode getInstance() en créant l'instance dès chargement de la classe.


Au final, quelque soit l'implémentation choisie, on récupère une instance unique du Singleton grâce à la méthode getInstance() :

0 commentaires:

Enregistrer un commentaire