Verstehen Sie das Singleton-Muster, indem Sie Java- und JavaScript-Code vergleichen

Einführung

Details und andere Muster werden in ** Grundlegendes zu Entwurfsmustern durch Vergleichen von Implementierungen in JavaScript und Java ** geschrieben.

Singleton-Muster

Software erstellt oder erlaubt normalerweise mehrere Instanzen aus einer Klasse Es gibt jedoch Zeiten, in denen "ich nur eine Instanz dieser Klasse erstelle und dies nicht möchte". Wie das legendäre Schwert im Rollenspiel Wenn Sie in einem Spiel, Online-Spiel usw. viele legendäre Schwerter erhalten, verringert sich der Wert.

Ein Putter, der garantiert, dass nur eine solche Instanz existiert, wird als ** Singleton-Muster ** bezeichnet.

Implementierungsbeispiel in Java

Klassen Diagramm

Der Grund, warum der Konstruktor privat ist, besteht darin, beim Schreiben von `new Singleton ()` einen Fehler auszulösen 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 und ojb2 sind dieselbe Instanz.");
        } else {
            System.out.println("obj1 und obj2 sind nicht dieselbe Instanz.");
        }
        System.out.println("End.");
        //Ich erhalte eine Fehlermeldung, wenn ich Folgendes auskommentiere
        // Singleton obj3 = new Singleton();
    }
}

Singleton.java


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

    private Singleton() {
        System.out.println("Instanz erstellt.");
    }
    public static Singleton getInstance() {
        return singleton;
    }
}

** Zeitpunkt der Instanzerstellung **

Ich denke, das Ausführungsergebnis wird wie folgt sein

Start.
Instanz erstellt.
obj1 und obj2 sind dieselbe Instanz.
End.

Wie Sie oben sehen können, können Sie sehen, dass die Instanz beim ersten Aufruf der getInstance-Methode erstellt wurde. Die Singleton-Klasse wird geladen, wenn die statische Methode getInstance aufgerufen wird.

Implementierungsbeispiel in 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.");
    /**
     *In dem Buch wurde Folgendes angegeben, aber ich habe es geändert, um den Vergleich zu erleichtern.
     * var obj1 = SINGLETON.singleton
     * var obj2 = SINGLETON.singleton
     */
    var obj1 = SINGLETON.singleton.getInstance();
    var obj2 = SINGLETON.singleton.getInstance();
    if (obj1 === obj2) {
        console.log("obj1 und obj2 sind dieselbe Instanz.");
    } else {
        console.log("obj1 und obj2 sind nicht dieselbe Instanz.");
    }
    console.log("End.");
};

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

Singleton.js


var SINGLETON = {};

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

    function init() {
        console.log("Instanz erstellt.");
        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;
        }
    };
})();

Zeichen im Singleton-Muster

** Die Rolle von Singleton **

Verfügt über eine statische Methode, um nur eine Instanz abzurufen Diese Methode gibt immer dieselbe Instanz zurück

Singleton-Klassendiagramm

Singleton.png

Singleton Muster brauchen

Garantie, wenn Sie nur eine Instanz wie oben beschrieben erstellen möchten Darüber hinaus ist eine verzögerte Ausführung in Singleton wichtig Verbraucht keinen Speicher, es sei denn, eine statische Instanz wird als Grund benötigt Im Fall von C ++ ist die Reihenfolge der dynamischen Initialisierung nicht vorhersehbar, sodass die Verwendung von Singleton den Vorteil hat, dass der Programmierer das Timing selbst bestimmen kann. Verwenden Sie es nicht nur für einen, sondern auch für Dinge, die keinen Sinn ergeben, selbst wenn Sie zwei oder mehr erstellen können

Anwendungsbeispiel Wenn Sie eine Klasse wie eine globale Variable verwenden möchten

Verwandte Muster

Referenz

[Einführung in Entwurfsmuster, die in der erweiterten und überarbeiteten Java-Sprache gelernt wurden](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) JavaScript-Entwurfsmuster

Recommended Posts

Verstehen Sie das Singleton-Muster, indem Sie Java- und JavaScript-Code vergleichen
Verstehen Sie das Iterator-Muster, indem Sie Java- und JavaScript-Code vergleichen
[Java] Singleton-Muster
Java und JavaScript
[Java] Verstehe den Unterschied zwischen List und Set
Verstehen Sie den Fehler, indem Sie ihn implementieren und analysieren. (1) Deadlock (Java)
In der Abbildung verstandene Java-Klassen und -Instanzen
Ich habe das Verhalten von Java Scanner und .nextLine () nicht wirklich verstanden.
Unterschied zwischen Java und JavaScript (wie man den Durchschnitt findet)
[Für Anfänger] Über die von Java Gold erklärte JavaScript-Syntax
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
[Java] Angemessene Einführung durch Tenpa-Leute Java Teil 0 (Code-Regeln)
Errate den Zeichencode in Java
[java8] Um die Stream-API zu verstehen
Java 9 neue Funktionen und Beispielcode
Beliebiger Code zum Erstellen von Zeichenfolgen durch Java
Java als Wert übergeben und als Referenz übergeben
Der Weg von JavaScript nach Java
Durch die Überprüfung der Funktionsweise von Java unter Linux konnte ich die Kompilierung und Hierarchie verstehen.
Webanwendungsstruktur nach Java und Verarbeitungsablauf in der Präsentationsschicht
Eine Sammlung von Phrasen, die das "unterschiedliche Gefühl" von Java und JavaScript beeindruckt
Anfänger können den Devise-Code sehen und verstehen, wie er funktioniert [Registrierungen neu]
Verstehen Sie den Unterschied zwischen int und Integer und BigInteger in Java und float und double
Java-Referenz zum Verständnis in der Abbildung
Verknüpfen Sie Java- und C ++ - Code mit SWIG
Probieren wir WebSocket mit Java und Javascript aus!
[Java 7] Teilen Sie die Java-Liste und führen Sie den Prozess aus
Führen Sie den in der Zwischenablage gespeicherten Java-Code aus.
Die Geschichte von Java SE11 Silber erhalten
Ich habe das Zustandsmuster und das Strategiemuster studiert
[Java8] Durchsuchen Sie das Verzeichnis und holen Sie sich die Datei
Seitenzahllogik und Referenzcode (Java)
Java vs. JavaScript: Was ist der Unterschied?
Unterschied zwischen Java, C # und JavaScript (wie man den Grad der Fettleibigkeit findet)
Erstellen Sie mit Docker eine Apache- und Tomcat-Umgebung. Übrigens Maven & Java Kooperation
Analysieren Sie die Datums- und Zeitzeichenfolge, die von der asctime-Funktion der C-Sprache in Java formatiert wurde