[GO] Ich habe ein Designmuster in der Kotlin Template 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 die Vorlage zusammenfassen.

Was ist eine Vorlage?

Ein Entwurfsmuster, in dem die Oberklasse das Verarbeitungsframework definiert (ähnliche gemeinsame Verarbeitung) und die Unterklasse den spezifischen Inhalt definiert. Im Folgenden werden wir den allgemeinen Prozess des "5-maligen wiederholten Anzeigens von Zeichen und Zeichenketten" als konkreten Prozess in jeder Unterklasse implementieren.

AbstractDisplay-Klasse

Es werden vier abstrakte Methoden definiert, die als Typen dienen, und die spezifische Verarbeitung von Öffnen, Drucken und Schließen wird in der Unterklasse implementiert.

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()
    }
}

CharDisplay-Klasse

Es ist eine Unterklasse, die AbstractDisplay, eine Vorlage, erbt. Diese Klasse implementiert eine bestimmte Verarbeitung, z. B. das Formatieren und Anzeigen eines im Konstruktor übergebenen Zeichens. Beim Erben einer Schnittstelle mit Kotlin wurde () nicht benötigt, aber bei einer abstrakten Klasse muss beim Erben () wie AbstractDisplay () hinzugefügt werden, was bedeutet, dass die Schnittstelle keinen Konstruktor hat. Abstrakte Klassen werden standardmäßig angehängt, da Konstruktoren implementiert werden können.

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(">>")
}

StringDisplay-Klasse

Es ist eine Unterklasse, die AbstractDisplay, eine Vorlage, erbt. Diese Klasse implementiert eine bestimmte Verarbeitung, z. B. das Formatieren und Anzeigen der im Konstruktor übergebenen Zeichenfolge. Wenn Sie in Kotlin eine beliebige Zahl in der for-Anweisung angeben und umdrehen möchten, geben Sie "for i..width" an.

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("+")
    }
}

Hauptklasse

Da es sich um eine Unterklasse handelt, die AbstractDisplay erbt, kann die Anzeigemethode aufgerufen werden, und die Ausgabe wird mit den in jeder implementierten Unterklasse definierten Inhalten ausgegeben.

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!!|
+-------------+

Klassen Diagramm

image.png

Impressionen

Referenz

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

Einführung in Kotlin für Java-Programmierer Reverse Kotlin

Recommended Posts

Ich habe ein Designmuster in der Kotlin Template 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 Singleton Edition geschrieben
Ich habe ein Designmuster in der Kotlin Adapter Edition geschrieben
Ich habe ein Designmuster in Kotlin geschrieben, das von Iterator bearbeitet wurde
Ein Memo, das ich schnell in Python geschrieben habe
Lernen Sie das Entwurfsmuster "Vorlagenmethode" in Python
Ich habe eine Klasse in Python3 und Java geschrieben
Ich habe einen japanischen Parser auf Japanisch mit Pyparsing geschrieben.
Entwurfsmuster # Template-Methode
Ich habe Python auf Japanisch geschrieben
Muster der Vorlagenmethode in Java
Python Design Pattern - Template-Methode
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
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts 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
Ich möchte in der Einschlussnotation drucken
Lernen Sie das Designmuster "Flyweight" 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 "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 "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.
Ich habe ein Diagramm wie R glmnet in Python für die spärliche Modellierung mit Lasso 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
Lernen Sie das Entwurfsmuster "Abstract Factory" mit Python
Löschen Sie Daten in einem Muster mit Redis Cluster
Ich habe versucht, mit Python ein Tippspiel zu spielen
Lernen Sie das Entwurfsmuster "Factory Method" in Python
Geschrieben "Einführung in die Effektüberprüfung" in Python
Ich habe ein Skript geschrieben, um ein WordPress-Plug-In hochzuladen
[PyTorch] Ich war ein wenig verloren in torch.max ()
Erstellen Sie in KiCad ein Rahmenantennenmuster in Python
[Viererbande] Design Pattern Learning - Template-Methode
Ich habe einen einfachen RSS-Reader ~ C Edition ~ gemacht
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.