1. Introduction en mode
Définition du modèle
Assurez-vous qu'une certaine classe n'a qu'une seule instance et l'instancie elle-même et fournit cette instance à l'ensemble du système.
Scénario d'utilisation du mode
Assurez-vous qu'une classe n'a qu'un seul objet, par exemple, la création d'un objet nécessite trop de ressources, comme l'accès à des ressources telles que les IO et les bases de données.
2. Diagramme de classe UML
Introduction du personnage:
(1) Client: Client de haut niveau.
(2) Singleton: Singleton.
3. Implémentation simple du modèle
classe publique Singleton {Intance de singleton statique privée; private singleton () {} public static singleton getInstance () {/ * * Au début, lorsque plusieurs threads entrent, ils rencontrent des verrous, et un fil entre, qui est vide, nouvel objet; Les threads suivants entrent, pas vide, aucune opération; Enfin renvoyez directement * L'objet n'est pas vide, et plusieurs threads entrent la fonction, pas vide, aucune opération de verrouillage n'est effectuée, et renvoie directement * / if (intance == null) {synchronisé (singleton.class) {if (intance == null) {Intance = new Singleton (); }} RETOUR INTANGE; }} class singleton1 {// Lazy private static singleton1 Intance = new Singleton1 (); // Lazy, il charge private singleton1 () {} public static singleton1 getInstance () {return intance; }} class singleton2 {// hungry private static singleton2 inseance; private singleton2 () {} public static singleton2 getInstance () {// charge if (intance == null) {intance = new singleton2 (); } RETOUR INTANCE; }} classe singleton3 {// Intance privée statique singleton3; privé singleton3 () {} public synchronisé statique Singleton3 getInstance () {// Chargement lorsqu'il est utilisé, les appels multithreads de verrouillage ont une action de verrouillage if (intance == null) {intance = new singleton3 (); } RETOUR INTANCE; }} classe singleton4 {// Intance privée statique singleton4; privé singleton4 () {} public static singleton4 getInstance () {// effondrement synchronisé (singleton4.class) {// L'efficacité de verrouillage est similaire à 3 if (intance == null) {intance = new Singleton4 (); }} RETOUR INTANGE; }}4. Pro et inconvénients
(1) Avantages:
A. Étant donné que le mode Singleton n'a qu'une seule instance en mémoire, les dépenses de mémoire sont réduites, en particulier lorsqu'un objet doit être créé et détruit fréquemment, et les performances ne peuvent pas être optimisées pendant la création ou la destruction, les avantages du mode Singleton sont très évidents.
B. Étant donné que le modèle singleton ne génère qu'une seule instance, les frais généraux de performance du système sont réduits. Lorsque la génération d'un objet nécessite beaucoup de ressources, telles que la configuration de lecture et la génération d'autres objets dépendants, il peut être résolu en générant directement un objet singleton lorsque l'application démarre et réside en permanence en mémoire;
C. Le mode Singleton peut éviter plusieurs professions de ressources, telles qu'une action de fichier d'écriture, car une seule instance est en mémoire, éviter les opérations d'écriture simultanées sur le même fichier de ressources.
D. Le mode Singleton peut définir des points d'accès globaux dans le système, optimiser et partager l'accès aux ressources. Par exemple, une classe singleton peut être conçue pour être responsable de la cartographie et du traitement de toutes les tables de données.
(2) Inconvénients
A. Le mode Singleton n'a généralement pas d'interface et il est difficile de se développer. Si vous souhaitez vous développer, il n'y a essentiellement pas de deuxième façon de l'implémenter, sauf la modification du code.