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 über Builder schreiben.
Beim Erstellen einer Struktur handelt es sich um ein Muster zum Zusammenstellen einer Instanz mit einer Struktur, so wie es in jedem Schritt zusammengesetzt wird. Das Beispielprogramm behandelt eine Struktur, die Sätze genannt wird Unter der Annahme, dass der Text die folgenden Stufen und Strukturen aufweist, definieren wir die Methoden, aus denen jede Stufe besteht.
- Fügen Sie einen Titel hinzu
Eine Klasse, die Methoden zum Verfassen von Sätzen definiert.
Builder.java
abstract class Builder {
public abstract void makeTitle(String title);
public abstract void makeString(String str);
public abstract void makeItems(String[] items);
public abstract void close();
}
Builder.kt
abstract class Builder {
abstract fun makeTitle(title: String)
abstract fun makeString(str: String)
abstract fun makeItems(items: Array<String>)
abstract fun close()
}
Diese Klasse implementiert die Konstruktmethode, um einen Satz zu konstruieren. Die Builder-Klasse wird im Konstruktor übergeben, aber da Builder eine abstrakte Klasse ist, ist die geerbte Unterklasse tatsächlich enthalten. Da es keine spezifische Unterklassendeklaration gibt, gibt es keine Abhängigkeiten. Darüber hinaus wird die Tatsache, dass Unterklassen ersetzt werden können, als Austauschbarkeit bezeichnet.
Director.java
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.makeTitle("Greeting");
builder.makeString("Von morgens bis mittags");
builder.makeItems(new String[] {
"Guten Morgen.",
"Hallo."
});
builder.makeString("Nachts");
builder.makeItems(new String[] {
"Guten Abend.",
"Gute Nacht.",
"Auf Wiedersehen."
});
builder.close();
}
}
Director.kt
class Director(builder: Builder) {
private var b = builder
fun construct(){
b.makeTitle("Greeting")
b.makeString("Von morgens bis mittags")
b.makeItems(arrayOf("Guten Morgen.", "Hallo."))
b.makeString("Nachts")
b.makeItems(arrayOf("Guten Abend.", "Gute Nacht.", "Auf Wiedersehen."))
b.close()
}
}
Eine Klasse, die Dokumente mit einfachem Text erstellt.
Als ich die for-Anweisung in kotlin schrieb, schrieb ich zuerst for (i: Int in 0..items.size -1)
, aber
Wie for (i: Int in 0 bis items.size)
zählt till die Anzahl der Brüche nicht, ist also für Array-Operationen geeignet.
Hinweis: Android-Entwicklung mit Kotlin! Halten wir die grundlegende Syntax gedrückt
Mit kotlin können Sie eine bequeme Methode namens "String Template" (String-Interpolation) schreiben. Sie können eine Zeichenfolge wie "println (" $ a + $ b = $ {a + b} ") // 2 + 3 = 5" einbetten.
TextBuilder.java
class TextBuilder extends Builder{
private StringBuffer buffer = new StringBuffer();
public void makeTitle(String title) {
buffer.append("================================================\n");
buffer.append(String.format("[%s]\n", title));
buffer.append("\n");
}
public void makeString(String str) {
buffer.append(String.format("■%s\n", str));
buffer.append("\n");
}
public void makeItems(String[] items) {
for (int i = 0; i < items.length; i++) {
buffer.append(String.format("・%s\n", items[i]));
}
buffer.append("\n");
}
public void close() {
buffer.append("================================================\n");
}
public String getResult() {
return buffer.toString();
}
}
TextBuilder.kt
class TextBuilder: Builder() {
private var buffer = StringBuffer()
override fun makeTitle(title: String) {
buffer.append("================================================\n")
buffer.append("[$title]\n")
buffer.append("\n")
}
override fun makeString(str: String) {
buffer.append("■$str\n")
buffer.append("\n")
}
override fun makeItems(items: Array<String>) {
for (i: Int in 0 until items.size) buffer.append("・${items[i]}\n")
buffer.append("\n")
}
override fun close() {
buffer.append("================================================\n")
}
fun getResult() = buffer.toString()
}
Eine Klasse, die Dokumente mithilfe von HTML-Dateien erstellt.
Ich hatte Probleme beim Initialisieren des Writer-Mitglieds mit der File-Klasse, aber ich habe gehört, dass Sie lateinit
verwenden können, um den Wert zu verzögern, der sich im Verlauf des Prozesses ändert.
Außerdem wird lateinit als "privat" empfohlen, da es schwierig ist, von außen darauf zuzugreifen, bevor es initialisiert wird.
Referenz: [Initialisierung mit Kotlin verzögern](https://re-engines.com/2018/11/15/Verzögerung mit kotlin / verzögern)
Sie können den printWriter mit java.io.File # printWriter () abrufen. Er wird erstellt, wenn die Datei nicht vorhanden ist, und überschrieben, wenn er vorhanden ist.
Wenn Sie es hinzufügen möchten, verwenden Sie appendText ()
.
Referenz: E / A (Datei, Netzwerk usw.)
Wenn Sie das Verhalten abhängig von der Existenz der Datei ändern möchten, verwenden Sie java.io.File # createNewFile (): Boolean
.
Referenz: Kotlin - Datei erstellen - Beispiele
HTMLBuilder.java
import java.io.*;
class HTMLBuilder extends Builder{
private String filename;
private PrintWriter writer;
public void makeTitle(String title) {
filename = title + ".html";
try {
writer = new PrintWriter(filename);
} catch (IOException e) {
e.printStackTrace();
}
writer.println(String.format("<html><head><title>%s</title></head><body>", title));
writer.println(String.format("<h1>%s</h1>", title));
}
public void makeString(String str) {
writer.println(String.format("<p>%s</p>", str));
}
public void makeItems(String[] items) {
writer.println("<ul>");
for (int i = 0; i < items.length; i++) {
writer.println(String.format("<li>%s</li>", items[i]));
}
writer.println("</ul>");
}
public void close() {
writer.println("</body></html>");
writer.close();
}
public String getResult() {
return filename;
}
}
HTMLBuilder.kt
import java.io.File
class HTMLBuilder: Builder() {
private var filename = String()
private lateinit var writer:File
override fun makeTitle(title: String) {
filename = "$title.html"
writer = File(filename)
writer.printWriter().use { it.println("<html><head><title>$filename</title></head><body>") }
writer.appendText("<h1>$title</h1>\n")
}
override fun makeString(str: String) {
writer.appendText("<p>$str</p>\n")
}
override fun makeItems(items: Array<String>) {
writer.appendText("<ul>\n")
for (i: Int in 0 until items.size) writer.appendText("<li>${items[i]}</li>\n")
writer.appendText("</ul>\n")
}
override fun close() {
writer.appendText("</body></html>\n")
}
fun getResult() = filename
}
BuilderSample.java
public class BuilderSample {
public static void main(String[] args) {
if (args.length != 1) {
usage();
System.exit(0);
}
if (args[0].equals("plain")) {
TextBuilder textbuilder = new TextBuilder();
Director director = new Director(textbuilder);
director.construct();
String result = textbuilder.getResult();
System.out.println(result);
} else if (args[0].equals("html")) {
HTMLBuilder htmlbuilder = new HTMLBuilder();
Director director = new Director(htmlbuilder);
director.construct();
String filename = htmlbuilder.getResult();
System.out.println(String.format("%s wurde erstellt.", filename));
} else {
usage();
System.exit(0);
}
}
public static void usage() {
System.out.println("Usage:Java Main Plain Dokumenterstellung mit Klartext");
System.out.println("Usage:Java Main HTML Dokumenterstellung mit HTML-Datei");
}
}
BuilderSample.kt
fun main(args: Array<String>) {
if (args.size != 1){
usage()
System.exit(0)
}
if (args[0] == "plain"){
val textbuilder = TextBuilder()
val director = Director(textbuilder)
director.construct()
val result = textbuilder.getResult()
println(result)
} else if (args[0] == "html") {
val htmlbuilder = HTMLBuilder()
val director = Director(htmlbuilder)
director.construct()
val filename = htmlbuilder.getResult()
println(filename)
} else {
usage()
System.exit(0)
}
}
fun usage() {
println("Usage:Java Main Plain Dokumenterstellung mit Klartext")
println("Usage:Java Main HTML Dokumenterstellung mit HTML-Datei")
}
einfaches Ausführungsergebnis
================================================
[Greeting]
■ Von morgens bis mittags
·Guten Morgen.
·Hallo.
■ Nachts
·Guten Abend.
·Gute Nacht.
·Auf Wiedersehen.
================================================
Ergebnis der HTML-Ausführung
Greeting.HTML wurde erstellt.
Greeting.html
<html><head><title>Greeting</title></head><body>
<h1>Greeting</h1>
<p>Von morgens bis mittags</p>
<ul>
<li>Guten Morgen.</li>
<li>Hallo.</li>
</ul>
<p>Nachts</p>
<ul>
<li>Guten Abend.</li>
<li>Gute Nacht.</li>
<li>Auf Wiedersehen.</li>
</ul>
</body></html>
==
dargestellt, und ich habe gelernt, equals intern auszuführen und ===
zu verwenden, wenn ich Referenzen vergleichen möchte.Es war sehr leicht zu lesen und zu verstehen, wenn man sich auf Folgendes bezog.
Kotlin – Create File – Examples Android-Entwicklung mit Kotlin! Halten wir die grundlegende Syntax gedrückt Was Java-Programmierer mit Kotlin nützlich finden [Initialisierung mit Kotlin verzögern](https://re-engines.com/2018/11/15/Verzögerung mit kotlin / verzögern) E / A (Datei, Netzwerk usw.) Kotlin - toString, equals, hashCode
Recommended Posts