Utiliser le design pattern Singleton

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.


Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée