Avantages du modèle singleton : 1. Il peut garantir que tous les objets accèdent à une instance unique ; 2. Parce que la classe contrôle le processus d'instanciation, la classe peut modifier de manière flexible le processus d'instanciation ; par exemple, cela réduit la surcharge de mémoire et la surcharge de performances du système.
Le modèle singleton est l'une des formes les plus simples de modèles de conception. Le but de ce modèle est de faire d'un objet d'une classe la seule instance du système. Pour y parvenir, vous commencez par l’instancier côté client. Il est donc nécessaire d'utiliser un mécanisme qui permet uniquement la génération d'instances uniques de la classe d'objet, "bloquant" tout accès à l'objet que l'on souhaite générer. Utilisez des méthodes d'usine pour limiter le processus d'instanciation. Cette méthode doit être une méthode statique (méthode de classe), car il ne sert à rien qu’une instance de la classe génère une autre instance unique.
Motivation du modèle Singleton
Pour certaines classes du système, il est important de n'avoir qu'une seule instance. Par exemple, il peut y avoir plusieurs tâches d'impression dans un système. Mais il ne peut y avoir qu'une seule tâche de travail ; un système ne peut avoir qu'un seul gestionnaire de fenêtres ou système de fichiers ; et un système ne peut avoir qu'un seul outil de synchronisation ou générateur d'ID (numéro de série). Par exemple, sous Windows, un seul gestionnaire de tâches peut être ouvert. Si vous n'utilisez pas de mécanisme pour unifier les objets de fenêtre, plusieurs fenêtres apparaîtront. Si le contenu affiché dans ces fenêtres est exactement le même, ce sont des objets en double, ce qui gaspille des ressources mémoire ; cela signifie qu'à un certain moment, le système a plusieurs états, qui ne correspondent pas à la réalité et peuvent également provoquer des malentendus chez les utilisateurs, qui ne savent pas lequel est l'état réel. Il est donc parfois très important de garantir l'unicité d'un objet dans le système, c'est-à-dire qu'il ne peut y avoir qu'une seule instance d'une classe. [2]
Comment s'assurer qu'une classe n'a qu'une seule instance et que cette instance est facile d'accès ? Définir une variable globale garantit que l'objet est accessible à tout moment, mais cela ne nous empêche pas d'instancier plusieurs objets. Une meilleure solution consiste à confier à la classe elle-même la responsabilité de sauvegarder sa seule instance. Cette classe garantit qu'aucune autre instance n'est créée et fournit une méthode pour accéder à l'instance. C'est la motivation du modèle derrière le modèle singleton.
Points clés du mode singleton
Évidemment il y a trois points principaux du mode singleton d'abord, une classe ne peut avoir qu'une seule instance, elle doit créer cette instance ; par lui-même ; Troisièmement, il doit fournir lui-même cette instance à l’ensemble du système.
Du point de vue spécifique de l'implémentation, il y a trois points : premièrement, la classe en mode singleton ne fournit que des constructeurs privés ; deuxièmement, la définition de classe contient un objet privé statique de la classe ; troisièmement, la classe fournit un public statique ; fonction pour créer ou obtenir son propre objet privé statique.
Dans le diagramme d'objets ci-dessous, il y a un "objet singleton", et "Client A", "Client B" et "Client C" sont les trois objets client de l'objet singleton. Comme vous pouvez le constater, tous les objets client partagent un objet singleton. Et on peut voir sur la ligne de connexion de l'objet singleton à lui-même que l'objet singleton contient une référence à lui-même.
Certains gestionnaires de ressources sont souvent conçus en mode singleton.
Dans un système informatique, les ressources qui doivent être gérées incluent des ressources logicielles externes. Par exemple, chaque ordinateur peut avoir plusieurs imprimantes, mais il ne peut y avoir qu'un seul spouleur d'imprimante pour empêcher la sortie de deux tâches d'impression. l'imprimante en même temps. Chaque ordinateur peut disposer de plusieurs cartes fax, mais un seul logiciel doit être responsable de la gestion des cartes fax pour éviter la situation dans laquelle deux tâches de fax sont transférées simultanément sur la carte fax. Chaque ordinateur peut avoir plusieurs ports de communication, et le système doit gérer ces ports de communication de manière centralisée pour empêcher qu'un port de communication soit appelé par deux requêtes en même temps.
Les ressources qui doivent être gérées incluent les ressources internes du logiciel. Par exemple, la plupart des logiciels disposent d'un (ou même de plusieurs) fichiers de propriétés pour stocker les configurations du système. Un tel système devrait avoir un objet gérant un fichier de propriétés.
Les ressources internes du logiciel qui doivent être gérées comprennent également des composants chargés d'enregistrer le nombre de visiteurs du site Web, des composants qui enregistrent les événements internes et les messages d'erreur du système logiciel, ou des composants qui vérifient les performances du système, etc. Ces composants doivent être gérés de manière centralisée et plusieurs composants ne peuvent pas être créés.
Ces composants du gestionnaire de ressources ne doivent avoir qu'une seule instance, qui est une ; ils doivent s'initialiser, ce qui est deux, et l'ensemble du système est autorisé à accéder à eux-mêmes, ce qui est la troisième ; Par conséquent, ils remplissent tous les conditions du modèle singleton et sont des applications du modèle singleton.
Tutoriel recommandé : "PHP"
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!