Comprendre le modèle Singleton en comparant le code Java et JavaScript

introduction

Les détails et autres modèles seront écrits dans ** Comprendre les modèles de conception en comparant les implémentations en JavaScript et Java **.

Motif singleton

Le logiciel crée ou autorise généralement plusieurs instances à partir d'une classe Cependant, il y a des moments où «je ne crée qu'une seule instance de cette classe et je ne veux pas». Comme l'épée légendaire en RPG Si vous obtenez de nombreuses épées légendaires dans un jeu, un jeu en ligne, etc., la valeur diminuera.

Un putter qui garantit qu'une seule instance de ce type existe est appelé le ** modèle Singleton **.

Exemple d'implémentation en Java

Diagramme de classe

La raison pour laquelle le constructeur est privé est de lancer une erreur lors de l'écriture de `` new Singleton () '' Singleton.png

code

Main.java


public class Main {
    public static void main(String[] args) {
        System.out.println("Strat.");
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2) {
            System.out.println("obj1 et ojb2 sont la même instance.");
        } else {
            System.out.println("obj1 et obj2 ne sont pas la même instance.");
        }
        System.out.println("End.");
        //J'obtiens une erreur lorsque je décommente ce qui suit
        // Singleton obj3 = new Singleton();
    }
}

Singleton.java


public class Singleton {
    private static Singleton singleton = new Singleton();

    private Singleton() {
        System.out.println("Créé une instance.");
    }
    public static Singleton getInstance() {
        return singleton;
    }
}

** Moment de la création de l'instance **

Je pense que le résultat de l'exécution sera le suivant

Start.
Créé une instance.
obj1 et obj2 sont la même instance.
End.

Comme vous pouvez le voir ci-dessus, vous pouvez voir que l'instance a été créée la première fois que la méthode getInstance a été appelée. La classe Singleton est chargée lorsque la méthode statique getInstance est appelée.

Exemple d'implémentation en JavaScript

code

index.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Singleton</title>
    <script src="Main.js"></script>
    <script src="Singleton.js"></script>
</head>
<body>
    
</body>
</html>

Main.js


var MAIN = {};

MAIN.init = function() {
    console.log("Start.");
    /**
     *Le livre a déclaré ce qui suit, mais je l'ai changé pour le rendre plus facile à comparer.
     * var obj1 = SINGLETON.singleton
     * var obj2 = SINGLETON.singleton
     */
    var obj1 = SINGLETON.singleton.getInstance();
    var obj2 = SINGLETON.singleton.getInstance();
    if (obj1 === obj2) {
        console.log("obj1 et obj2 sont la même instance.");
    } else {
        console.log("obj1 et obj2 ne sont pas la même instance.");
    }
    console.log("End.");
};

window.addEventListener("load", MAIN.init);

Singleton.js


var SINGLETON = {};

SINGLETON.singleton = (function() {
    var instance;

    function init() {
        console.log("Créé une instance.");
        var privateVariable = "I am also private";
        function privateMethod() {
            console.log("I am private");
        }

        return {
            publicProperty: "I am also public",
            publicMethod: function() {
                console.log("The public can ses me!");
            }
        };
    };

    return {
        getInstance: function() {
            if (!instance) {
                instance = init();
            }

            return instance;
        }
    };
})();

Caractères dans le modèle Singleton

** Le rôle de Singleton **

A une méthode statique pour obtenir une seule instance Cette méthode renvoie toujours la même instance

Diagramme de classe Singleton

Singleton.png

Besoin de motif Singleton

Garantie lorsque vous ne souhaitez créer qu'une seule instance comme décrit ci-dessus De plus, l'exécution différée est importante en singleton Ne consomme pas de mémoire sauf si une instance statique est nécessaire comme raison Dans le cas de C ++, l'ordre d'initialisation dynamique est imprévisible, donc l'utilisation de singleton présente l'avantage que le programmeur peut décider lui-même du timing. En plus de vouloir n'en faire qu'un, utilisez-le pour des choses qui n'ont pas de sens même si vous pouvez en faire deux ou plus

Exemple d'utilisation Lorsque vous souhaitez utiliser une classe comme une variable globale

Modèles associés

référence

[Introduction aux modèles de conception appris dans le langage Java amélioré et révisé](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82% E7% 89% 88Java% E8% A8% 80% E8% AA% 9E% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% B6% E3% 82% A4% E3% 83% B3% E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E5% 85% A5% E9% 96% 80-% E7% B5 % 90% E5% 9F% 8E-% E6% B5% A9 / dp / 4797327030) Modèle de conception JavaScript

Recommended Posts

Comprendre le modèle Singleton en comparant le code Java et JavaScript
Comprendre le modèle Iterator en comparant le code Java et JavaScript
[Java] Motif singleton
Java et JavaScript
[Java] Comprendre la différence entre List et Set
Comprendre le bogue en l'implémentant et en l'analysant (1) Deadlock (Java)
Classes et instances Java comprises dans la figure
Je n'ai pas vraiment compris le comportement de Java Scanner et .nextLine ()
Différence entre Java et JavaScript (comment trouver la moyenne)
[Pour les débutants] À propos de la syntaxe JavaScript expliquée par Java Gold
Corrigez le code de caractère en Java et lisez à partir de l'URL
[Java] Introduction appropriée par Tenpa people Java Part 0 (règles du code)
Devinez le code de caractère en Java
[java8] Pour comprendre l'API Stream
Nouvelles fonctionnalités de Java 9 et exemple de code
Code de création de chaîne arbitraire par Java
Java passe par valeur et passe par référence
La route de JavaScript à Java
En vérifiant le fonctionnement de Java sous Linux, j'ai pu comprendre la compilation et la hiérarchie.
Structure de l'application Web par Java et flux de traitement dans la couche de présentation
Une collection de phrases qui impressionne le "sentiment différent" de Java et de JavaScript
Les débutants peuvent voir le code de Devise et comprendre son fonctionnement [registrations new]
Comprendre la différence entre int et Integer et BigInteger en java et float et double
Référence Java à comprendre dans la figure
Lier le code Java et C ++ avec SWIG
Essayons WebSocket avec Java et javascript!
[Java 7] Divisez la liste Java et exécutez le processus
Exécutez le code Java stocké dans le presse-papiers.
L'histoire reçue par Java SE11 silver
J'ai étudié le modèle d'état et le modèle de stratégie
[Java8] Recherchez le répertoire et récupérez le fichier
Logique du numéro de page et code de référence (java)
Java vs JavaScript: quelle est la différence?
Différence entre Java, C # et JavaScript (comment trouver le degré d'obésité)
Créez un environnement Apache et Tomcat avec Docker. À propos, coopération Maven & Java
Analyser en Java les chaînes de date et d'heure formatées par la fonction asctime du langage C