[GO] J'ai écrit un modèle de conception dans l'édition de modèle kotlin

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 appris à propos de% 85% A5% E9% 96% 80 & qid = 1559563427 & s = gateway & sr = 8-1) et j'ai décidé d'écrire en kotlin pendant que j'étais en Java. Cette fois, je vais résumer Template.

Quel est le modèle

Un modèle de conception dans lequel la superclasse définit le cadre de traitement (traitement partagé similaire) et la sous-classe définit le contenu spécifique. Dans ce qui suit, nous implémenterons le processus courant «d'afficher des caractères et des chaînes de caractères 5 fois de façon répétée» comme processus concret dans chaque sous-classe.

Classe AbstractDisplay

Quatre méthodes abstraites servant de types sont définies et le traitement spécifique d'ouverture, d'impression et de fermeture est implémenté dans la sous-classe.

AbstractDisplay.java


abstract class AbstractDisplay {
	public abstract void open();
	public abstract void print();
	public abstract void close();
	public final void display() {
		open();
		for(int i = 0; i < 5; i++) {
			print();
		}
		close();
	}
}

AbstractDisplay.kt


abstract class AbstractDisplay {
    abstract fun open(): Unit
    abstract fun print(): Unit
    abstract fun close(): Unit
    fun display(): Unit {
        open()
        for (i: Int in 1..5) print()
        close()
    }
}

Classe CharDisplay

C'est une sous-classe qui hérite de AbstractDisplay, qui est un modèle, et cette classe implémente un traitement spécifique tel que le formatage et l'affichage d'un caractère passé dans le constructeur. Lors de l'héritage d'une interface avec Kotlin, () n'était pas nécessaire, mais avec une classe abstraite, il est nécessaire d'ajouter () comme AbstractDisplay () lors de l'héritage, ce qui signifie que l'interface n'a pas de constructeur, Les classes abstraites sont attachées par défaut car les constructeurs peuvent être implémentés.

CharDisplay.java


class CharDisplay extends AbstractDisplay {
	private char ch;
	public CharDisplay(char ch) {
		this.ch = ch;
	}
	@Override
	public void open() {
		System.out.print("<<");
	}
	@Override
	public void print() {
		System.out.print(ch);
	}
	@Override
	public void close() {
		System.out.println(">>");
	}
}

CharDisplay.kt


class CharDisplay(private val ch: Char): AbstractDisplay() {
    override fun open() = print("<<")
    override fun print() = print(ch)
    override fun close() = println(">>")
}

Classe StringDisplay

C'est une sous-classe qui hérite de AbstractDisplay, qui est un modèle, et cette classe implémente un traitement spécifique tel que le formatage et l'affichage de la chaîne de caractères passée dans le constructeur. Dans Kotlin, si vous souhaitez spécifier un nombre arbitraire dans l'instruction for et l'activer, spécifiez for i..width.

StringDisplay.java


class StringDisplay extends AbstractDisplay {
	private String str;
	private int width;
	public StringDisplay(String str) {
		this.str = str;
		this.width = str.getBytes().length;
	}
	@Override
	public void open() {
		printLine();
	}
	@Override
	public void print() {
		System.out.println("|" + str + "|");
	}
	@Override
	public void close() {
		printLine();
	}
	private void printLine() {
		System.out.print("+");
		for(int i = 0; i < width; i++) {
			System.out.print("-");
		}
		System.out.println("+");
	}
}

StringDisplay.kt


class StringDisplay(private val str: String, private  val width: Int = str.length): AbstractDisplay() {
    override fun open()= printLine()
    override fun print() = println("|" + this.str + "|")
    override fun close() = printLine()
    private fun printLine() {
        print("+")
        for (i: Int in 1..width) print("-")
        println("+")
    }
}

Classe principale

Puisqu'il s'agit d'une sous-classe qui hérite de AbstractDisplay, la méthode d'affichage peut être appelée et la sortie est sortie avec le contenu défini dans chaque sous-classe implémentée.

TemplateSample.java


public class TemplateSample {
	public static void main(String[] args) {
		AbstractDisplay d1 = new CharDisplay('H');
		AbstractDisplay d2 = new StringDisplay("Hello, World");
		AbstractDisplay d3 = new StringDisplay("Hello World!!");
		
		d1.display();
		d2.display();
		d3.display();
	}
}

Template.kt


fun main(args: Array<String>){
    val d1: AbstractDisplay = CharDisplay('H')
    val d2: AbstractDisplay = StringDisplay("Hello, World")
    val d3: AbstractDisplay = StringDisplay("Hello World!!")

    d1.display()
    d2.display()
    d3.display()
}
<<HHHHH>>
+------------+
|Hello, World|
|Hello, World|
|Hello, World|
|Hello, World|
|Hello, World|
+------------+
+-------------+
|Hello World!!|
|Hello World!!|
|Hello World!!|
|Hello World!!|
|Hello World!!|
+-------------+

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 Reverse Kotlin

Recommended Posts

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 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 dans l'édition Kotlin Adapter
J'ai écrit un modèle de conception en kotlin, édité par Iterator
Un mémo que j'ai écrit un tri rapide en Python
Apprenez le modèle de conception "Méthode de modèle" en Python
J'ai écrit une classe en Python3 et Java
J'ai écrit un analyseur japonais en japonais en utilisant pyparsing.
Design Pattern #Template, méthode
J'ai écrit python en japonais
Modèle de méthode de modèle en Java
Python Design Pattern - Méthode de modèle
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 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
Je veux imprimer dans la notation d'inclusion
Apprenez le modèle de conception "Flyweight" 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 "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 "É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.
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
Apprenez le modèle de conception "Abstract Factory" avec Python
Supprimer des données dans un modèle avec Redis Cluster
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
[PyTorch] J'étais un peu perdu dans torch.max ()
Créer un modèle d'antenne cadre en Python dans KiCad
[Gang of Four] Apprentissage des modèles de conception - Méthode du modèle
J'ai fait un simple lecteur RSS ~ Edition C ~
J'ai créé un programme cryptographique César en Python.