[GO] Ich habe ein Designmuster in der Kotlin Singleton Edition geschrieben

Erlernen des Konzepts der Schnittstelle und der Wiederverwendbarkeit von Objekten, die für die Objektorientierung wichtig sind ["Einführung in in Java-Sprache erlernte Entwurfsmuster"](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 / ref = sr_1_1? __Mk_ja_JP =% E3% 82% AB % E3% 82% BF% E3% 82% AB% E3% 83% 8A & Schlüsselwörter = Java% 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 Ich habe% 85% A5% E9% 96% 80 & qid = 1559563427 & s = gateway & sr = 8-1) kennengelernt und mich entschieden, in Kotlin zu schreiben, während ich in Java war. Dieses Mal werde ich Singleton zusammenfassen.

Was ist Singleton?

Singleton ist ein Begriff, der sich auf eine Menge bezieht, die nur ein Element enthält und als Muster definiert ist, das die folgenden Rollen spielt.

Singleton-Klasse

In dieser Klasse wird das als statisches Feld definierte Singleton-Mitglied mit einer Instanz der Singleton-Klasse initialisiert, beim Laden der Klasse jedoch nur einmal. Darüber hinaus wird garantiert, dass nur eine Instanz erstellt wird, indem der Zugriff von außen mit privat verhindert wird.

Für Kotlin gibt es keine Definition von statisch, sondern ein Begleitobjekt.

Referenz: Wie soll ich ein statisches Mitglied in Kotlin schreiben?

Wenn Sie "Companion-Objekt" definieren und dekompilieren, wird von Getter / Setter über das Companion-Objekt darauf zugegriffen. Verwenden Sie also const oder @JvmField. Da const jedoch nur ein primitiver Typ oder ein String-Typ ist, wird @JvmField für einen nicht primitiven Typ angegeben. Wenn @JvmField für einen primitiven Typ angegeben wird, wird der Anfangswert zweimal zugewiesen, sodass er ordnungsgemäß verwendet werden muss. @JvmField wird jedoch verwendet, um dem Feld Sichtbarkeit zu verleihen, sodass es in diesem privaten Bereich nicht verwendet werden kann.

Referenz: [Kotlin] [Java] Kotlin Java-Vergleichsnotiz Calling Kotlin from Java

__ Nachtrag: @sdkei Vielen Dank für Ihre Bewertung! __ __ Nach Erhalt einer Überprüfung wird gesagt, dass Kotlin mithilfe der Objektdeklaration einfacher implementiert werden kann, auch wenn es nicht wie oben beschrieben implementiert ist. ⇒Singleton2.kt,SingletonSample2.kt

Referenz: Entwurfsmuster mit Kotlin Singleton Objektausdrücke und Deklarationen

Singleton.java


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

Singleton.kt


class Singleton {
    init { println("Instanz erstellt.") }
    companion object {
       private val singleton = Singleton()
       fun getInstance() = this.singleton
    }
}

Singleton2.kt


object Singleton {
    init { println("Instanz erstellt.") }
}

Hauptklasse

SingletonSample.java


public class SingletonSample {
	public static void main(String[] args) {
		System.out.println("Start.");
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		if (s1 == s2) {
			System.out.println("s1 und s2 sind dieselbe Instanz.");
		} else {
			System.out.println("s1 und s2 sind nicht dieselbe Instanz.");
		}
		System.out.println("End.");
	}
}

SingletonSample.kt


fun main(args: Array<String>) {
    println("Start.")
    val s1 = Singleton.getInstance()
    val s2 = Singleton.getInstance()
    if (s1 == s2) println("s1 und s2 sind dieselbe Instanz.")
    else println("s1 und s2 sind nicht dieselbe Instanz.")
    println("End.")
}

SingletonSample2.kt


fun main(args: Array<String>) {
    println("Start.")
    val s1 = Singleton
    val s2 = Singleton
    if (s1 == s2) println("s1 und s2 sind dieselbe Instanz.")
    else println("s1 und s2 sind nicht dieselbe Instanz.")
    println("End.")
}

Ausführungsergebnis


Start.
Instanz erstellt.
s1 und s2 sind dieselbe Instanz.
End.

Klassen Diagramm

image.png

Impressionen

  1. Definieren Sie "Companion Object {}" anstelle von "Static"
  2. Geben Sie im Begleiter "const" für den primitiven Typ und den String-Typ und "@ JvmField" für den nicht-primitiven Typ an.
  3. Wenn privat, verwenden Sie es wie es ist
  4. Das Singleton-Muster kann leicht durch Objektdeklaration verwendet werden.

Referenz

Es war sehr leicht zu lesen und zu verstehen, wenn man sich auf Folgendes bezog.

Wie soll ich ein statisches Mitglied in Kotlin schreiben? [Kotlin] [Java] Kotlin Java-Vergleichsnotiz Calling Kotlin from Java Entwurfsmuster mit Kotlin Singleton Objektausdrücke und Deklarationen

Recommended Posts

Ich habe ein Designmuster in der Kotlin Singleton Edition geschrieben
Ich habe ein Designmuster in der Kotlin Factory Edition geschrieben
Ich habe ein Designmuster in der Kotlin Builder Edition geschrieben
Ich habe ein Designmuster in der Kotlin Adapter Edition geschrieben
Ich habe ein Designmuster in Kotlin geschrieben, das von Iterator bearbeitet wurde
Ich habe ein Designmuster in der Kotlin Template Edition geschrieben
Ich habe ein Designmuster in der Kotlin Prototype Edition geschrieben
Entwurfsmuster #Singleton
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe eine Klasse in Python3 und Java geschrieben
Ich habe einen japanischen Parser auf Japanisch mit Pyparsing geschrieben.
Singleton-Muster in Python
Ich habe Python auf Japanisch geschrieben
Ich habe ein Skript geschrieben, um eine beliebte Seite in Japan zu bekommen
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
Ich bekomme einen UnicodeDecodeError mit mecab-python3
Ich erhalte einen KeyError in pyclustering.xmeans
Implementieren Sie das Singleton-Muster in Python
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Ich habe Fizz Buzz in Python geschrieben
Ich habe Gray Scale mit Pytorch geschrieben
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
Ich habe die Warteschlange in Python geschrieben
Ich habe an AtCoder teilgenommen (ABC169 Edition)
Ich habe den Stack in Python geschrieben
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
[Python] Ich habe gewaltsam eine kurze Funktion zur Erzeugung von Parlin-Geräuschen in Numpy geschrieben.
Ich habe FizzBuzz in Python mit der Support Vector Machine (Bibliothek LIVSVM) geschrieben.
Lernen Sie das Entwurfsmuster "Prototype" mit Python
Lernen Sie das Entwurfsmuster "Builder" mit Python
[Viererbande] Design Pattern Learning - Singleton
Ich möchte in der Einschlussnotation drucken
Lernen Sie das Designmuster "Flyweight" in Python
Ich habe ein Pay-Management-Programm in Python erstellt!
Lernen Sie das Entwurfsmuster "Observer" in Python
Lernen Sie das Entwurfsmuster "Memento" mit Python
Lernen Sie das Entwurfsmuster "Proxy" in Python
Lernen Sie das Entwurfsmuster "Befehl" in Python
Lernen Sie das Entwurfsmuster "Besucher" mit Python
Lernen Sie das Entwurfsmuster "Bridge" mit Python
Lernen Sie das Entwurfsmuster "Mediator" mit Python
Lernen Sie das Designmuster "Decorator" mit Python
Schriftliche Auswahlsortierung in C.
Lernen Sie das Entwurfsmuster "Iterator" mit Python
Lernen Sie das Entwurfsmuster "Strategie" mit Python
Lernen Sie das Entwurfsmuster "Composite" mit Python
Lernen Sie das Entwurfsmuster "Singleton" mit Python
Lernen Sie das Entwurfsmuster "State" in Python
Ich habe Project Euler 1 in einem Liner geschrieben.
Lernen Sie das Entwurfsmuster "Adapter" mit Python
Startete Node.js in einer virtuellen Umgebung
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe den Gleitflügel in der Schöpfung geschrieben.
[Basic Information Engineer Examination] Ich habe einen linearen Suchalgorithmus in Python geschrieben.
Ich habe ein PyPI-Modul geschrieben, das den Parameterstil in Pythons sqlite3-Modul erweitert
Wenn ich einen Chrom-Treiberfehler in Selenium bekomme
Lernen Sie das Entwurfsmuster "Abstract Factory" mit Python
Löschen Sie Daten in einem Muster mit Redis Cluster
Ich möchte mit Python ein Fenster erstellen
Ich habe versucht, mit Python ein Tippspiel zu spielen
Lernen Sie das Entwurfsmuster "Factory Method" in Python