|
Publié le par Ernest RIBEIRO

Pattern Singleton

Le design pattern Singleton en Java ?

Qu'est-ce que c'est ?

Le design pattern "Singleton" est un patron de conception qui permet d'avoir une seule et unique instance d'une classe dans toute une application. Autrement dit c'est l'instance d'origine, créée au tout début, qui sera retournée à chaque fois.

Pourquoi s'en servir ?

Dans plusieurs cas de figure :

  • Mon objet est particulièrement coûteux à fabriquer, je ne souhaite donc l'instancier qu'une seule fois.

    • Par exemple l'EntityManagerFactory d'Hibernate.
  • Mon objet possède des données partagées avec tous les composants de mon application, je ne souhaite pas de redondance en mémoire.

    • Par exemple un cache.
  • Mon objet est une classe utilitaire qui n'a pas d'état donc aucun besoin d'encapsuler des valeurs dans une instance.

  • Je n'ai pas envie qu'il y ait plusieurs instances tout simplement.

Remarque : le singleton est un cas particulier puisqu'il est considéré à la fois comme un pattern mais également comme un antipattern. En effet, trop de singletons dans une application impliquera des liens statiques non mockables et rendra le code difficilement testable unitairement.

Ce pattern est donc à utiliser avec parcimonie.

Différentes implémentations du singleton

Le singleton est un cas particulier puisque ses implémentations diffèrent selon les langages. Dans la pratique et en Java, il peut être thread-safe, non thread-safe, instancié via lazy-loading ou non, statique ou non (cas d'un framework avec Spring).

Du fait de la multitude d'implémentations possibles et des explications détaillées à fournir pour chacune d'entre-elles, vous trouverez ci-dessous un article par implémentation en Java :