Cet article partage le code spécifique du modèle singleton du modèle de conception Java pour votre référence. Le contenu spécifique est le suivant
concept:
Singleton Pattern: il n'y a qu'une seule instance dans une classe.
Une classe a et une seule instance et fournit un point d'accès global.
Causes d'utilisation de ce mode:
Lorsque nous naviguons sur des sites Web, certains sites Web afficheront "le nombre actuel de personnes en ligne". Généralement, la façon d'implémenter cette fonction est de stocker chaque IP connecté dans une mémoire, un fichier ou une base de données, et chaque IP supplémentaire est obtenue "+1". Généralement, il s'agit d'une méthode, comme Add (), pour réaliser la fonction de "+1". Par exemple, utilisez l'instruction "Mise à jour" pour obtenir les données stockées dans la base de données d'abord, puis +1, mettez à jour les données dans la base de données, puis enregistrez-les; Lorsqu'il est affiché sur la page, vous pouvez obtenir les données dans la base de données via une autre méthode. Cependant, lorsque plusieurs utilisateurs se connectent en même temps, si chacun d'eux a besoin d'un nouveau objet, exécutez la méthode ADD () via l'appel "Nom de la méthode", puis stockez les données dans la base de données, cela entraînera que plusieurs utilisateurs ne seront pas en mesure d'enregistrer avec précision les données utilisateur réelles dans la base de données. Par conséquent, la conception de ce compteur comme un objet global (tout le monde utilise cet objet, au lieu d'une, nouvelle), et tout le monde partage les mêmes données, peut éviter des problèmes similaires. C'est l'une des applications du modèle singleton que nous appelons.
De même, dans d'autres scénarios, des scénarios similaires seront rencontrés et des idées similaires seront utilisées. Par exemple:
1. Ressources externes: chaque ordinateur a plusieurs imprimantes, mais un seul imprimante peut être utilisé pour éviter que deux travaux d'impression soient sortis vers l'imprimante en même temps. Ressources internes: la plupart des logiciels ont un (ou plusieurs) fichiers d'attribut pour stocker les configurations système. Un tel système devrait avoir un objet pour gérer ces fichiers d'attribut. 2. Le gestionnaire de tâches de Windows (Task Manager) est un mode Singleton typique (c'est très familier). Pensez-y, pouvez-vous ouvrir deux gestionnaires de tâches Windows? Si vous ne le croyez pas, essayez-le vous-même ~
3. Recycler le bac pour Windows est également une application singleton typique. Pendant l'ensemble du fonctionnement du système, le bac de recyclage n'a maintenu qu'une seule instance.
4. Le compteur du site Web est généralement mis en œuvre en mode Singleton, sinon il sera difficile à synchroniser.
5. Comment implémenter l'application du journal des applications en mode singleton? Cela est généralement dû au fait que le fichier journal partagé est toujours ouvert, car il ne peut y avoir qu'une seule instance à utiliser, sinon le contenu sera difficile à ajouter.
6. Le mode Singleton est généralement utilisé pour lire des objets de configuration dans les applications Web, car le fichier de configuration est une ressource partagée.
7. La conception des pools de connexion de base de données adopte généralement un mode singleton, car la connexion de la base de données est une ressource de base de données. L'utilisation de pools de connexions de base de données dans les systèmes de logiciels de base de données enregistre principalement les pertes d'efficacité causées par l'ouverture ou la fermeture des connexions de la base de données. Cette perte d'efficacité est toujours très chère, car le mode Singleton peut considérablement réduire cette perte.
8. La conception de pools de threads multi-thread adopte généralement le mode Singleton, car le pool de threads doit faciliter le contrôle des threads dans la piscine.
9. Le système de fichiers du système d'exploitation est également un exemple spécifique de l'implémentation du grand mode Singleton. Un système d'exploitation ne peut avoir qu'un seul système de fichiers.
10. Httpapplication est également une application typique d'exemples unitaires. Quiconque connaît l'ensemble du cycle de vie de la demande d'ASP.NET (IIS) doit savoir que HTTPAPPLICATION est également un singleton, et tous les httpmodules partagent une instance httpapplication.
Pour résumer, les scénarios d'application généraux du mode Singleton sont:
1. Objets qui doivent être instanciés fréquemment puis détruits.
2. Des objets qui prennent trop de temps ou trop de ressources lors de la création d'objets, mais sont souvent utilisés.
3. Objets de type outil avec état.
4. Accès fréquent à la base de données ou aux objets de fichier.
5. Dans le cas du partage des ressources, évitez les performances ou les pertes causées par le fonctionnement des ressources. Comme les fichiers journaux, les configurations d'application, etc. dans ce qui précède.
6. Lorsque vous contrôlez les ressources, facilitez la communication mutuelle entre les ressources. Comme les piscines de fil, etc.
Caractéristiques:
1. Il ne peut y avoir qu'une seule instance dans une classe singleton;
2. La classe Singleton doit créer sa propre instance unique;
3. La classe Singleton doit fournir cette instance à tous les autres objets.
Éléments du motif singleton:
1. Méthode de construction privée
2. Points de référence statiques privés à votre propre instance
3. Méthode statique publique avec sa propre instance comme valeur de retour
Il existe trois façons de mettre en œuvre le modèle Singleton:
1. Style affamé: les instances singleton sont construites lors du chargement des cours et sont initialisées de toute urgence. (Méthode de précharge)
/ *** Hungry Man Style (recommandé) ** / public class test {private test () {} public static test instance = new test (); Test public getInstance () {return instance; }} avantage
1. Sécurité du fil
2. Un objet statique a été créé pendant le chargement de la classe, et la vitesse de réponse est rapide lorsque vous l'appelez
défaut
L'efficacité des ressources n'est pas élevée et getInstance () peut ne jamais être exécutée, mais si d'autres méthodes statiques de la classe sont exécutées ou que la classe (class.forname) est chargée, cette instance est toujours initialisée.
2. Style paresseux: les instances singleton sont construites lorsqu'elles sont utilisées pour la première fois et sont initialisées.
Class Test {private test () {} public static test instance = null; public static test getInstance () {if (instance == null) {// Lorsque plusieurs threads déterminent que l'instance est nul, plusieurs threads auront une duplication lors de l'exécution de nouvelles opérations instance = new Singleton2 (); } return instance; }} avantage
Évitez la création de cas sans les utiliser sous la forme d'hommes affamés. Le taux d'utilisation des ressources est élevé. Si vous n'exécutez pas GetInstance (), vous ne serez pas instancié. D'autres méthodes statiques de cette classe peuvent être exécutées.
défaut
Il n'y a aucun problème avec le style paresseux dans un seul thread, mais lorsque des collègues accèdent à plusieurs threads, ils peuvent créer plusieurs instances et ces multiples instances ne sont pas le même objet. Bien que les instances créées ultérieurement écrasent les instances créées en premier, il y aura toujours des cas où différents objets seront obtenus. La solution à ce problème est de verrouiller la synchonisée, ce qui n'est pas assez rapide lors du chargement pour la première fois, et la surcharge de synchronisation inutile du multi-threading est élevée.
3. Double détection
Class Test {private test () {} public static test instance = null; public static test getInstance () {if (instance == null) {synchronisé (test.class) {if (instance == null) {instance = new test (); }} return instance; }} avantage
Le taux d'utilisation des ressources est élevé. Si vous n'exécutez pas GetInstance (), vous ne serez pas instancié. Vous pouvez exécuter d'autres méthodes statiques de cette classe.
défaut
La réponse n'était pas rapide lors du chargement pour la première fois et a parfois échoué pour certaines raisons du modèle de mémoire Java.
4. Classes internes statiques
classe Test {Test privé () {} classe statique privée singletonHelp {instance de test statique = new test (); } test statique public getInstance () {return singletonhelp.instance; }} avantage
Le taux d'utilisation des ressources est élevé et il n'est pas exécuté sans obtenir l'instance. Vous pouvez exécuter d'autres méthodes statiques de cette classe.
défaut
Pas assez rapide lors du chargement pour la première fois
Résumer:
Généralement, le style affamé est utilisé. Si vous vous souciez beaucoup des ressources, vous pouvez utiliser des types internes statiques. Il n'est pas recommandé d'utiliser le style paresseux et la double détection.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.