Hier ist eine Zusammenfassung des ** Builder-Musters ** im GoF-Entwurfsmuster.
Ein Programm, das Dokumente im Nur-Text- und HTML-Format ausgibt.
Eine abstrakte Klasse, die Methoden zum Erstellen eines Dokuments definiert.
Builder.java
public 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();
}
Eine Klasse, die ein einzelnes Dokument erstellt.
Guide.java
public class Guide {
private Builder builder;
public Guide(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.makeTitle("Über Grillen");
builder.makeString("Datum (und Uhrzeit");
builder.makeItems(new String[]{
"2019/2/28 (Holz)",
"11:00~",
});
builder.makeString("Ort");
builder.makeItems(new String[]{
"xxx Stadt xxx Grillplatz",
});
builder.makeString("Besitz");
builder.makeItems(new String[]{
"Handtuch",
"Fleisch",
"trinken",
"(Abkürzung)",
});
builder.close();
}
}
Eine Klasse, die Dokumente im Klartext erstellt.
TextBuilder.java
public class TextBuilder extends Builder {
private StringBuffer buffer = new StringBuffer();
public void makeTitle(String title) {
buffer.append("==============================\n");
buffer.append("『" + title + "』\n");
buffer.append("\n");
}
public void makeString(String str) {
buffer.append('■' + str + "\n");
buffer.append("\n");
}
public void makeItems(String[] items) {
for (int i = 0; i < items.length; i++) {
buffer.append("・" + items[i] + "\n");
}
buffer.append("\n");
}
public void close() {
buffer.append("==============================\n");
}
public String getResult() {
return buffer.toString();
}
}
Eine Klasse, die ein Dokument mit einer HTML-Datei erstellt.
HTMLBuilder.java
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class HTMLBuilder extends Builder {
private String filename;
private PrintWriter writer;
public void makeTitle(String title) {
filename = title + ".html";
try {
writer = new PrintWriter(new FileWriter(filename));
} catch (IOException e) {
e.printStackTrace();
}
writer.println("<html><head><title>" + title + "</title></head><body>");
writer.println("<h1>" + title + "</h1>");
}
public void makeString(String str) {
writer.println("<p>" + str + "</p>");
}
public void makeItems(String[] items) {
writer.println("<ul>");
for (int i = 0; i < items.length; i++) {
writer.println("<li>" + items[i] + "</li>");
}
writer.println("</ul>");
}
public void close() {
writer.println("</body></html>");
writer.close();
}
public String getResult() {
return filename;
}
}
Diese Klasse führt die Hauptverarbeitung durch.
Main.java
public class Main {
public static void main(String[] args) {
if (args.length != 1) {
System.exit(0);
}
if (args[0].equals("plain")) {
TextBuilder textbuilder = new TextBuilder();
Guide guide = new Guide(textbuilder);
guide.construct();
String result = textbuilder.getResult();
System.out.println(result);
} else if (args[0].equals("html")) {
HTMLBuilder htmlbuilder = new HTMLBuilder();
Guide guide = new Guide(htmlbuilder);
guide.construct();
String filename = htmlbuilder.getResult();
System.out.println(filename + "Wurde erschaffen.");
} else {
System.exit(0);
}
}
}
==============================
"Über Grillen"
■ Datum und Uhrzeit
・ 2019/2/28 (Holz)
・ 11:00~
■ Standort
・ Xxx Stadt xxx Grillplatz
■ Was ist mitzubringen?
·Handtuch
·Fleisch
·trinken
・(Abkürzung)
==============================
4-6-2. HTML
Mit Blick auf das Beispielprogramm weiß die Main-Klasse nicht, wie ein Dokument erstellt wird (eine Methode der Builder-Klasse). Die Hauptklasse kann Sätze einfach durch Aufrufen der Konstruktionsmethode der Guide-Klasse erstellen. Außerdem verwendet die Guide-Klasse die Builder-Klasse, um das Dokument zu erstellen, aber die Guide-Klasse weiß nicht, welche Klasse sie tatsächlich verwendet (TextBuilder oder HTMLBuilder). Unabhängig davon, ob Sie Guide eine TextBuilder-Instanz oder Guide eine HTMLBuilder-Instanz zuweisen, funktioniert dies, da die Guide-Klasse die spezifische Klasse der Builder-Klasse nicht kennt. ** Sie können es ersetzen, weil Sie es nicht kennen, und der Wert als Teil erhöht sich, weil Sie es ersetzen können. ** ** **
Dieser Artikel und das Beispielprogramm wurden basierend auf den folgenden Büchern erstellt.
Es war sehr leicht zu verstehen und ich habe viel gelernt. Vielen Dank. Die detaillierten Erklärungen der Entwurfsmuster und Beispielprogramme sind geschrieben. Schauen Sie sich also auch die Bücher an.
Recommended Posts