Design Patterns Javascript : Maîtriser le Singleton !

Design Patterns Javascript : Maîtriser le Singleton !

23 Oct 2023

Dans le monde de JavaScript, les design patterns sont votre arme secrète pour créer un code efficace, organisé et maintenable. Parmi ces patterns, le Singleton pattern se distingue comme une puissance polyvalente, vous permettant de garantir une seule instance d'une classe dans toute votre application. Voyons comment ça fonctionne !


Démystification du Singleton pattern

Le Singleton pattern garantit qu'une classe a une seule instance et fournit un point d'accès global à cette instance. Cela signifie que peu importe le nombre de fois où vous demandez une instance de la classe, vous obtiendrez toujours la même. Le Singleton pattern est particulièrement utile lorsque vous avez besoin de gérer des ressources partagées ou de contrôler l'accès à un seul point, tel qu'un gestionnaire de configuration, une connexion à une base de données ou, dans notre cas, un système de logs.


L'exemple du système de logs

Configuration du système de logs

Imaginez que vous construisez une application JavaScript composée de plusieurs modules et fichiers. Le débogage et le suivi des problèmes dans toute l'application peuvent devenir un défi sans un système de logs unifié. C'est là que le Singleton pattern intervient pour vous sauver.

Créons un simple logger qui contiendra un seul tableau de logs tout au long de l'application. Voici notre fichier logger.js :

1class Logger {
2  constructor() {
3    this.logs = [];
4  }
5
6  log(message) {
7    this.logs.push(message);
8  }
9
10  showLogs() {
11    console.log(this.logs);
12  }
13
14  static getInstance() {
15    if (!this.instance) {
16      this.instance = new Logger();
17    }
18    return this.instance;
19  }
20}
21
22export default Logger;

Dans cette implémentation, nous avons défini une classe Logger qui permet de logger des messages et de les afficher. La méthode statique getInstance garantit qu'une seule instance de la classe Logger existe dans toute votre application.

Utilisation du Singleton Logger

Voyons maintenant comment nous pouvons utiliser le Singleton logger dans différentes parties de notre application.

app.js (Utilisation dans un fichier)

1import Logger from './logger.js';
2
3const loggerInstance1 = Logger.getInstance();
4loggerInstance1.log('Log message 1');
5loggerInstance1.log('Log message 2');
6
7loggerInstance1.showLogs();

Dans app.js, nous importons l'instance du logger, créons un loggerInstance1, et l'utilisons pour enregistrer des messages. La beauté du Singleton pattern est que nous travaillons toujours avec la même instance, garantissant que tous les logs sont stockés au même endroit centralisé.

anotherFile.js (Utilisation dans un autre fichier)

1import Logger from './logger.js';
2
3const loggerInstance2 = Logger.getInstance();
4loggerInstance2.log('Log message from another file');
5
6loggerInstance2.showLogs();

Dans anotherFile.js, nous importons à nouveau la même instance de Logger et utilisons loggerInstance2. Malgré le fait d'être dans un fichier différent, loggerInstance2 est essentiellement la même instance que loggerInstance1. Cela signifie que tous les logs des deux fichiers sont accumulés dans le même tableau de logs, vous offrant une vue d'ensemble complète du comportement de votre application.


Avantages du Singleton Logger

L'implémentation du Singleton pattern pour un logger dans votre application JavaScript offre plusieurs avantages :

1 - Logging centralisée : Tous les logs sont collectés en un seul endroit, ce qui facilite le suivi du comportement de l'application et le débogage des problèmes.

2 - Cohérence : Vous pouvez être sûr que vous travaillez avec la même instance du logger dans toute votre application, garantissant l'intégrité des données.

3 - Intégration facile : Le Singleton logger s'intègre facilement dans différentes parties de votre code, améliorant ainsi l'efficacité globale du code.


Conclusion

Le Singleton pattern est un outil puissant en JavaScript, offrant une manière simple de gérer des ressources partagées et de maintenir un point de contrôle unique dans votre application. Comme le démontre notre exemple de logger, il garantit que vous disposez d'une instance de logger cohérente, simplifiant le débogage et améliorant l'efficacité du code.

En maîtrisant le Singleton pattern et en l'utilisant judicieusement, vous pouvez libérer tout le potentiel de vos applications JavaScript, les rendant plus organisées, maintenables, et efficaces.

Mon X

Mon portfolio

Voir plus d'articles