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 Builder.
Lors de la construction d'une structure, il s'agit d'un modèle d'assemblage d'une instance avec une structure, tout comme elle est assemblée à chaque étape. L'exemple de programme traite d'une structure appelée phrases En supposant que le texte comporte les étapes et structures suivantes, nous définirons les méthodes qui composent chaque étape.
- Inclure un titre
Une classe qui définit des méthodes pour composer des phrases.
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()
}
Cette classe implémente la méthode construct
pour construire une phrase.
La classe Builder est transmise au constructeur, mais comme Builder est une classe abstraite, la sous-classe héritée est en fait incluse.
Puisqu'il n'y a pas de déclaration de sous-classe spécifique, il n'y a pas de dépendances,
De plus, le fait que les sous-classes peuvent être remplacées est appelé exchangeability.
Director.java
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.makeTitle("Greeting");
builder.makeString("Du matin à midi");
builder.makeItems(new String[] {
"Bonjour.",
"Bonjour."
});
builder.makeString("La nuit");
builder.makeItems(new String[] {
"Bonsoir.",
"bonne nuit.",
"Au revoir."
});
builder.close();
}
}
Director.kt
class Director(builder: Builder) {
private var b = builder
fun construct(){
b.makeTitle("Greeting")
b.makeString("Du matin à midi")
b.makeItems(arrayOf("Bonjour.", "Bonjour."))
b.makeString("La nuit")
b.makeItems(arrayOf("Bonsoir.", "bonne nuit.", "Au revoir."))
b.close()
}
}
Une classe qui crée des documents en utilisant du texte brut.
Quand j'ai écrit l'instruction for dans kotlin, j'ai d'abord écrit for (i: Int in 0..items.size -1)
, mais
Comme for (i: Int in 0 until items.size)
, until ne compte pas les fractions, il convient donc aux opérations Array.
Référence: Développement Android avec Kotlin! Maintenons la syntaxe de base
Avec kotlin, vous pouvez écrire une méthode pratique appelée String Template
(interpolation de chaîne).
Vous pouvez incorporer une chaîne de caractères comme println (" $ a + $ b = $ {a + b} ") // 2 + 3 = 5
.
Référence: Ce que les programmeurs Java trouvent utile avec Kotlin
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()
}
Une classe qui crée des documents à l'aide de fichiers HTML.
J'avais du mal à initialiser le membre écrivain avec la classe File, mais j'ai entendu dire que vous pouvez utiliser lateinit
pour retarder la valeur qui change à mesure que le processus progresse.
En outre, lateinit est recommandé comme «privé» car il est difficile d'y accéder de l'extérieur avant qu'il ne soit initialisé.
Référence: [Delay initialization with Kotlin](https://re-engines.com/2018/11/15/Delay initialization with kotlin /)
Vous pouvez obtenir le printWriter en utilisant java.io.File # printWriter ()
, il sera créé si le fichier n'existe pas, et écrasé s'il existe.
Si vous voulez l'ajouter, utilisez ʻappendText () `.
Référence: E / S (fichier, réseau, etc.)
Si vous voulez changer le comportement en fonction de l'existence du fichier, utilisez java.io.File # createNewFile (): Boolean
.
Référence: Kotlin - Créer un fichier - Exemples
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 a été créé.", filename));
} else {
usage();
System.exit(0);
}
}
public static void usage() {
System.out.println("Usage:java Création de document brut principal avec du texte brut");
System.out.println("Usage:Création de document html principal java avec fichier HTML");
}
}
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 Création de document brut principal avec du texte brut")
println("Usage:Création de document html principal java avec fichier HTML")
}
résultat d'exécution clair
================================================
[Greeting]
■ Du matin à midi
·Bonjour.
·Bonjour.
■ La nuit
·Bonsoir.
·bonne nuit.
·Au revoir.
================================================
résultat de l'exécution html
Greeting.html a été créé.
Greeting.html
<html><head><title>Greeting</title></head><body>
<h1>Greeting</h1>
<p>Du matin à midi</p>
<ul>
<li>Bonjour.</li>
<li>Bonjour.</li>
</ul>
<p>La nuit</p>
<ul>
<li>Bonsoir.</li>
<li>bonne nuit.</li>
<li>Au revoir.</li>
</ul>
</body></html>
==
, et j'ai appris à exécuter equals en interne et à utiliser ===
si je veux comparer des références.C'était très facile à lire et à comprendre en se référant à ce qui suit.
Kotlin – Create File – Examples Développement Android avec Kotlin! Maintenons la syntaxe de base Ce que les programmeurs Java trouvent utile avec Kotlin [Délai d'initialisation avec Kotlin](https://re-engines.com/2018/11/15/Délai d'initialisation avec kotlin /) E / S (fichier, réseau, etc.) Kotlin - toString, equals, hashCode
Recommended Posts