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

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, j'écrirai sur Adapter.

Qu'est-ce que l'adaptateur

Il s'agit d'un modèle de conception qui comble le fossé entre ce qui est déjà fourni et ce qui est nécessaire, et est également appelé modèle Wrapper. Un modèle de rôles qui encapsule la classe d'origine et répond aux spécifications requises.

Deux types d'implémentation de modèle d'adaptateur

  1. Modèle avec héritage en classe
  2. Modèle avec délégation en instance Deux types sont introduits, mais cette fois je voudrais implémenter un modèle utilisant l'héritage dans la première classe.

Modèle avec héritage en classe

Classe d'époque

Cette classe est supposée être la classe fournie à l'origine. Lors de l'héritage dans kotlin, la classe est traitée comme java final, il est donc nécessaire d'ouvrir et d'hériter, alors spécifiez open avant la définition de la classe référence: https://www.atmarkit.co.jp/ait/articles/1804/24/news008.html

Era.java


class Era{
	private int year;
	public Era(int year) {
		this.year = year;
	}
	
	public int yearToReiwa() {
		return year - 2018;
	}
	
	public int yearToHeisei() {
		return year - 1988;
	}
}

Era.kt


open class Era(private val year: Int){
    fun yearToReiwa(): Int = this.year - 2018
    fun yearToHeisei(): Int = this.year - 1988
}

Interface d'impression

Il s'agit d'une interface qui répond aux exigences requises en tant que spécification. Dans kolin, utilisez Unit lors de la spécification de void en Java

Print.java


interface Print{
	public abstract void printAsReiwa();
	public abstract void printAsHeisei();
}

Print.kt


interface Print{
    fun printAsReiwa(): Unit
    fun printAsHeisei(): Unit
}

Classe PrintEra

Cette classe devient un adaptateur et encapsule la classe Era pour répondre aux exigences requises. Le fait est que les spécifications requises peuvent être implémentées sans changer l'implémentation de la classe Era. Lors de l'héritage, spécifiez ": Era", et lors de l'appel du constructeur hérité, utilisez ": Era (year)".

PrintEra.java


class PrintEra extends Era implements Print{
	public PrintEra(int year) {
		super(year);
	}
	public void printAsHeisei() {
		System.out.println("Heisei" + yearToHeisei() + "Année");
	}
	public void printAsReiwa() {
		if(yearToReiwa() == 1) System.out.println("Première année de Reiwa");
		else System.out.println("Reiwa" + yearToReiwa() + "Année");	
	}
}

PrintEra.kt


class PrintEra(private val year: Int) :Era(year), Print{
    override fun printAsHeisei(): Unit = println("Heisei" + yearToHeisei() + "Année")
    override fun printAsReiwa() {
        if (yearToReiwa() == 1) println("Première année de Reiwa") else println("Reiwa" + yearToReiwa() + "Année")
    }
}

Classe principale

Il s'agit de la classe Main qui exploite en fait la classe ci-dessus.

AdapterSample.java


public class AdapterSample {
	public static void main(String[] args) {
		Print p = new PrintEra(2019);
		p.printAsHeisei();
		p.printAsReiwa();
	}
}

AdapterSample.kt


fun main(args: Array<String>){
    val p: Print = PrintEra(2019)
    p.printAsHeisei()
    p.printAsReiwa()
}

Résultat d'exécution


2019
Première année de Reiwa

Diagramme de classe

image.png

Impressions

référence

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

Introduction à Kotlin pour les programmeurs Java

Recommended Posts

J'ai écrit un modèle de conception dans l'édition Kotlin Adapter
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 Singleton
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 #Adapter
Apprenez le modèle de conception "Adapter" avec Python
J'ai écrit une classe en Python3 et Java
J'ai écrit un analyseur japonais en japonais en utilisant pyparsing.
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
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
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 "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 "État" en Python
J'ai écrit Project Euler 1 en une seule ligne.
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.
[Gang of Four] Apprentissage des modèles de conception - Adaptateur
J'ai écrit un graphe comme R glmnet en Python pour une modélisation clairsemée avec Lasso
[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
Apprenez le modèle de conception "Méthode de modèle" en Python
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
J'ai écrit "Introduction à la vérification des effets" en Python
J'ai écrit un script pour télécharger un plug-in WordPress