[JAVA] J'ai écrit un modèle de conception dans l'édition Kotlin Singleton

Pour apprendre le concept d'interface et la réutilisabilité des objets, qui sont importants dans l'orientation des objets ["Introduction aux modèles de conception appris en langage Java"](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 & mots-clés = 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 J'ai entendu parler de% 85% A5% E9% 96% 80 & qid = 1559563427 & s = gateway & sr = 8-1) et j'ai décidé d'écrire en kotlin en plus de Java. Cette fois, je vais résumer Singleton.

Qu'est-ce que Singleton

Singleton est un terme qui fait référence à un ensemble qui n'a qu'un seul élément et qui est défini comme un modèle qui joue les rôles suivants.

Classe Singleton

Dans cette classe, le membre singleton défini comme un champ statique est initialisé avec une instance de la classe Singleton, mais il n'est initialisé qu'une seule fois lorsque la classe est chargée. De plus, il est garanti qu'une seule instance sera créée en empêchant l'accès de l'extérieur avec private.

Pour kotlin, il n'y a pas de définition de statique, définissez plutôt un objet compagnon.

Référence: Comment écrire un membre statique dans Kotlin?

De plus, si vous définissez «objet compagnon» et que vous le décompilez, il sera accessible depuis getter / setter via l'objet Companion, utilisez donc const ou @JvmField. Cependant, comme const est uniquement de type primitif ou de type String, @JvmField est spécifié pour le type non primitif, et si @JvmField est spécifié pour le type primitif, la valeur initiale est affectée deux fois, il est donc nécessaire de l'utiliser correctement. Cependant, @JvmField est utilisé pour donner de la visibilité au champ, il ne peut donc pas être utilisé dans ce domaine privé.

Référence: [Kotlin] [Java] Mémo de comparaison Kotlin Java Calling Kotlin from Java

__ Addendum: @sdkei Merci pour votre avis! __ Après avoir reçu un examen, on dit que Kotlin peut être implémenté plus facilement en utilisant la déclaration d'objet même si elle n'est pas implémentée comme décrit ci-dessus. ⇒Singleton2.kt,SingletonSample2.kt

Référence: Modèle de conception avec Kotlin Singleton Expressions et déclarations d'objets

Singleton.java


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

Singleton.kt


class Singleton {
    init { println("Créé une instance.") }
    companion object {
       private val singleton = Singleton()
       fun getInstance() = this.singleton
    }
}

Singleton2.kt


object Singleton {
    init { println("Créé une instance.") }
}

Classe principale

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 et s2 sont la même instance.");
		} else {
			System.out.println("s1 et s2 ne sont pas la même instance.");
		}
		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 et s2 sont la même instance.")
    else println("s1 et s2 ne sont pas la même instance.")
    println("End.")
}

SingletonSample2.kt


fun main(args: Array<String>) {
    println("Start.")
    val s1 = Singleton
    val s2 = Singleton
    if (s1 == s2) println("s1 et s2 sont la même instance.")
    else println("s1 et s2 ne sont pas la même instance.")
    println("End.")
}

Résultat d'exécution


Start.
Créé une instance.
s1 et s2 sont la même instance.
End.

Diagramme de classe

image.png

Impressions

  1. Définissez objet compagnon {} au lieu de statique
  2. Dans le compagnon, spécifiez const pour le type primitif et le type String, et @ JvmField pour le type non primitif.
  3. Si privé, utilisez tel quel
  4. Le modèle Singleton peut être facilement utilisé par déclaration d'objet.

référence

C'était très facile à lire et à comprendre en se référant à ce qui suit.

Comment écrire un membre statique dans Kotlin? [Kotlin] [Java] Mémo de comparaison Kotlin Java Calling Kotlin from Java Modèle de conception avec Kotlin Singleton Expressions et déclarations d'objets

Recommended Posts

J'ai écrit un modèle de conception dans l'édition Kotlin Singleton
J'ai écrit un modèle de conception dans l'édition Kotlin Factory
J'ai écrit un modèle de conception dans l'édition Kotlin Builder
J'ai écrit un modèle de conception dans l'édition Kotlin Adapter
J'ai écrit un modèle de conception en kotlin, édité par Iterator
J'ai écrit un modèle de conception dans l'édition de modèle kotlin
J'ai écrit un modèle de conception dans l'édition Kotlin Prototype
Modèle de conception #Singleton
Un mémo que j'ai écrit un tri rapide en Python
J'ai écrit une classe en Python3 et Java
J'ai écrit un analyseur japonais en japonais en utilisant pyparsing.
Motif singleton en Python
J'ai écrit python en japonais
J'ai écrit un script pour obtenir un site populaire au Japon
J'ai écrit un script qui divise l'image en deux
J'obtiens un UnicodeDecodeError avec mecab-python3
J'obtiens une KeyError dans pyclustering.xmeans
Implémenter le modèle Singleton en Python
J'ai écrit une fonction pour charger le script d'extension Git en Python
J'ai écrit Fizz Buzz en Python
J'ai écrit Gray Scale avec Pytorch
J'ai écrit un script pour extraire les liens de pages Web en Python
J'ai écrit la file d'attente en Python
J'ai participé à AtCoder (édition ABC169)
J'ai écrit la pile en Python
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
[Python] J'ai écrit de force une courte fonction de génération de bruit parlin dans Numpy.
J'ai écrit FizzBuzz en python en utilisant la machine à vecteurs de support (bibliothèque LIVSVM).
Apprenez le modèle de conception "Prototype" avec Python
Apprenez le modèle de conception "Builder" avec Python
[Gang of Four] Apprentissage des modèles de conception --Singleton
Je veux imprimer dans la notation d'inclusion
Apprenez le modèle de conception "Flyweight" en Python
J'ai fait un programme de gestion de la paie en Python!
Apprenez le modèle de conception "Observer" en Python
Apprenez le modèle de conception "Memento" avec Python
Apprenez le modèle de conception "Proxy" en Python
Apprenez le modèle de conception "Commande" en Python
Apprenez le modèle de conception "Visiteur" avec Python
Apprenez le modèle de conception "Bridge" avec Python
Apprenez le modèle de conception "Mediator" avec Python
Apprenez le modèle de conception "Décorateur" avec Python
Tri sélect écrit en C
Apprenez le modèle de conception "Iterator" avec Python
Apprenez le modèle de conception «Stratégie» avec Python
Apprenez le modèle de conception "Composite" avec Python
Apprenez le modèle de conception "Singleton" avec Python
Apprenez le modèle de conception "État" en Python
J'ai écrit Project Euler 1 en une seule ligne.
Apprenez le modèle de conception "Adapter" avec Python
Démarrage de Node.js dans un environnement virtuel
J'ai créé un outil de mot de passe en Python.
J'ai écrit l'aile coulissante dans la création.
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme de recherche linéaire en Python.
J'ai écrit un module PyPI qui étend le style de paramètre dans le module sqlite3 de Python
Quand j'obtiens une erreur de pilote chrome dans Selenium
Apprenez le modèle de conception "Abstract Factory" avec Python
Supprimer des données dans un modèle avec Redis Cluster
Je veux créer une fenêtre avec Python
J'ai essayé de jouer à un jeu de frappe avec Python
Apprenez le modèle de conception "Méthode d'usine" en Python