|
Utiliser le "singleton pattern" avec Java.
1. Qu’est ce qu’un singleton
Un singleton est une classe qui ne possède que des méthodes et membres "static". On ne parle pas ici du mot clé spécifique à java mais d’un concept de programmation qui peut très bien s’appliquer à d’autres langages objet. (c’est un design pattern).
2. Pourquoi et quand utiliser les singletons
Parfois, il est nécessaire et suffisant de n’avoir qu’une seule instance d’une classe (ou un groupe d’instances). Cela a des avantages dans la gestion de la mémoire et donc du garbage Collector (pour java) mais également dans la sécurité ou pour des raisons budgétaires. Nous pourrions par exemple avoir un ensemble de "pool" de connexions à une base de données qui serait géré par un singleton. Cela permettrait ainsi de gagner en mémoire mais également en sécurité (moins de connexions vers l’extérieur si la base de données n’est pas locale).
Cependant il est déconseillé d’utiliser ce design pattern pour tous les autres types de classes qui utilisent énormément de données dynamiques (ce qui va contre la définition même du singleton).
3. Exemple de code
Voici le plus simple singleton possible :
public class ClassSingleton { // Seule instance de Class Factory public static ClassSingleton seuleInstance;
// Initialisateur static { // Crée la seule instance seuleInstance = new ClassSingleton(); }
// Constructeur privé private ClassSingleton() { }
// Getter qui renvoie l’instance public static ClassSingleton getInstance() { return seuleInstance; } }
Il se compose d’un "initializer" qui permet de charger les éléments static lors du chargement de la classe. La méthode getInstance() retourne l’instance du singleton.
4. Quelle est la différence avec une classe ayant que des attributs statiques
Quel est l’intérêt d’utiliser un singleton lorsque notre classe ne possède qu’une instance de classe et des membres et méthodes statiques La réponse est aussi simple : ça ne sert à rien ormis alourdir le système. Le pattern singleton est très utile dès que notre classe d’instance unique contient des sous-classes. En effet, à partir de là nous utilisons qu’une seule implémentation de Singleton mais qui peut varier en fonction d’un paramétre qui permettra d’installer une seule instance précise de classe lors de l’invocation et donc avoir une application beaucoup plus dynamique.
Conclusion
Le pattern "Singleton" comme la pluspart des patterns est difficile à imaginer en dehors d’une application concrète. Mais il devient limpide lorsque l’on s’arrête sur un problème et que la solution est le Singleton.
|