Pattern singleton - RobinDumontChaponet/synthese GitHub Wiki
Un des design pattern que l'on a choisi d'utiliser est le pattern singleton. Ce pattern permet de limiter le nombre d’instanciations des différents objets que l'on manipule. Le principe est simple. Effectivement, il s'agit d'une méthode que l'on met dans les classes où l'on veut limiter le nombre d'objets instanciés à 1. Cette méthode teste si l'objet que l'on veut instancier l'est déjà. Si oui, elle renvoie cet objet. Si l'objet n'est pas encore instancié, alors elle l'instancie et le renvoie. Ceci implique que le constructeur des classes concernées aura une visibilité restreinte à la classe, et ce pour être sûr que l'objet ne sera pas instancié plusieurs fois. C'est ce que l'on appelle la méthode de création contrôlée.
Afin de mieux expliquer le rôle et l'importance du pattern singleton, prenons un exemple. Intéressons nous à la classe Connexion. Cette dernière a pour rôle de se connecter à la base de données et donc de permettre l'exploitation des données qui y sont stockées. Il serait inutile de se connecter à la base de données à chaque fois que l'on veut extraire une partie de son contenu et que l'on veut y apporter des modifications. Une seule connexion est suffisante. C'est là que le pattern singleton entre en jeu. Il va tout simplement nous permettre d'éviter d'instancier plusieurs fois un objet Connexion. Par conséquent, nous ne nous connecterons à la base de données qu'une seule et unique fois.
Une autre méthode pour remédier aux problèmes des instanciations multiples serait de créer une variable globale accessible par toutes les classes. Cependant, cette solution présente un léger désavantage. Effectivement, il se peut qu'un programmeur (dans notre groupe ou travaillant sur le projet après nous) instancie un objet du même type que la variable globale. Ainsi, cela causera une (ou plusieurs) instanciations inutiles. Cela explique donc notre choix pour le pattern singleton.
Diagramme UML
Voici un diagramme UML accompagné du code de la méthode getInstance (méthode du pattern singleton) afin d'illustrer ce qui est mentionné ci-dessus.