Le Modèle Singleton est l'un des concepts les plus fondamentaux à comprendre. Il est classé comme un modèle de conception de création et il est utilisé pour contrôler la création d'objets, garantissant qu'une seule instance d'une classe particulière existe tout au long de la durée de vie d'une application.
En termes plus simples, cela garantit qu'une classe est responsable de la gestion d'une seule une seule version d'elle-même, et elle donne un accès global à cette seule instance.
Alors, quand/pourquoi utiliser le modèle Singleton, c'est l'une des questions les plus courantes ?
Avant de plonger dans le quand/pourquoi en utilisant les modèles Singleton, il est important de comprendre les énoncés du problème. Chaque modèle de conception est créé en réponse aux défis spécifiques rencontrés par les développeurs.
Énoncé du problème : connexion à la base de données
Nous souhaitons gérer une seule connexion à une base de données dans l’ensemble de notre application. La création de connexions multiples peut entraîner des conflits et un épuisement des ressources.
// first instance DataConnection dataConnection1 = new DataConnection(); //Second instance DataConnection dataConnection2 = new DataConnection();
Dans ce scénario, la création de deux instances de DataConnection peut entraîner des problèmes de ressources. Chaque instance peut effectuer des opérations indépendamment, entraînant des conflits et un comportement imprévisible si elles tentent d'accéder simultanément à la même ressource de base de données.
Pour résoudre ce problème, nous avons besoin du modèle Singleton.
Le modèle Singleton est en effet populaire, en particulier dans la conception de logiciels, car c'est un outil puissant mais qui peut facilement être utilisé à mauvais escient. Comprenons quand il est approprié d’utiliser le modèle Singleton :
Quand une seule instance d'une classe est nécessaire à l'échelle mondiale
Si nous avons besoin d’une classe qui ne doit avoir qu’une seule instance dans l’ensemble de l’application, le modèle Singleton est le meilleur choix ? . Cela garantit que toutes les parties de l'application fonctionnent avec la même instance, maintenant la cohérence et évitant les instances en double qui pourraient gaspiller de la mémoire.
Quand nous avons besoin d'une gestion centralisée des ressources partagées
Les singletons sont bénéfiques lorsqu'il existe des ressources partagées, telles que des paramètres de configuration, des caches ou des outils de journalisation, qui sont nécessaires à plusieurs parties de la demande. L'accès et la gestion centralisés simplifient la gestion des ressources, en particulier pour les classes qui doivent être accessibles et modifiables globalement.
Quand on veut contrôler l'accès à une ressource
Les singletons permettent un accès contrôlé à une seule ressource en l'encapsulant dans une classe. Cela les rend utiles lorsqu'une seule connexion ou ressource doit être utilisée à la fois, comme la gestion d'un rédacteur de fichiers pour garantir un accès synchronisé ou une connexion réseau partagée.
Dans les applications multithread ou parallèles
Dans les applications comportant plusieurs threads, un Singleton peut garantir que les sections critiques ou les ressources partagées ne sont pas accessibles par plus d'un thread à la fois. Un Singleton correctement implémenté peut fournir un accès thread-safe, réduisant ainsi le risque de conditions de concurrence et garantissant qu'une seule instance d'une ressource partagée est accessible simultanément.
Maintenant, nous comprenons le problème et quand l'utiliser, voyons comment résoudre ce problème.
Le diagramme UML comprend généralement les composants suivants :
Voici une représentation simple du diagramme UML pour le modèle Singleton :
Remarque :
Voici un exemple de modèle Singleton implémenté en Java :
// first instance DataConnection dataConnection1 = new DataConnection(); //Second instance DataConnection dataConnection2 = new DataConnection();
Maintenant, si nous voulons obtenir l'instance de Database Connection, nous appelons ses méthodes statiques comme ceci : DataConnection dataConnection = DataConnection.getConnection();.
public class DataConnection { private static DataConnection instance = null; /* * This private keyword in constructor * is to prevent direct instantiation from * outside the class. */ private DataConnetion() { } /* * static method so that we can call * this method outside the class without * instantiation object */ public static DataConnection getConnection() { if (instance == null) { instance = new DataConnection(); } return instance; } public void showMessage() { System.out.println("Database is connected"); } }
Le modèle Singleton est un modèle de conception fondamental qui garantit qu'une seule instance d'une classe particulière existe dans une application. En limitant le processus d'instanciation et en fournissant un accès global à une seule instance, le modèle Singleton permet de gérer efficacement les ressources partagées, telles que connexions à la base de données, paramètres de configuration et enregistreurs. Ce modèle est particulièrement utile dans les scénarios où la cohérence et l'accès contrôlé aux ressources sont cruciaux.
Pour plus d'informations et les meilleures pratiques sur la mise en œuvre efficace du modèle Singleton, reportez-vous à ce guide sur DigitalOcean.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!