Voici un résumé du ** modèle Builder ** dans le modèle de conception GoF.
Un programme qui produit des documents au format texte brut et HTML.
Une classe abstraite qui définit les méthodes de construction d'un document.
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();
}
Une classe qui crée un seul document.
Guide.java
public class Guide {
private Builder builder;
public Guide(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.makeTitle("À propos du barbecue");
builder.makeString("Date et l'heure");
builder.makeItems(new String[]{
"2019/2/28 (bois)",
"11:00~",
});
builder.makeString("endroit");
builder.makeItems(new String[]{
"xxx city xxx aire de barbecue",
});
builder.makeString("Affaires");
builder.makeItems(new String[]{
"serviette",
"Viande",
"boisson",
"(Abréviation)",
});
builder.close();
}
}
Une classe qui crée des documents en texte brut.
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();
}
}
Une classe qui crée un document avec un fichier HTML.
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;
}
}
Cette classe effectue le traitement principal.
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 + "A été créé.");
} else {
System.exit(0);
}
}
}
==============================
"À propos du barbecue"
■ Date et heure
・ 2019/2/28 (bois)
・ 11:00~
■ Emplacement
・ Xxx city xxx aire de barbecue
■ Quoi apporter
·serviette
·Viande
·boisson
・(Abréviation)
==============================
4-6-2. HTML
En regardant l'exemple de programme, la classe Main ne sait pas comment créer un document (une méthode de la classe Builder). La classe Main peut construire des phrases simplement en appelant la méthode construct de la classe Guide. De plus, la classe Guide utilise la classe Builder pour créer le document, mais la classe Guide ne sait pas quelle classe elle utilise réellement (TextBuilder ou HTMLBuilder). Donner une instance de TextBuilder à Guide ou une instance de HTMLBuilder à Guide fonctionne correctement car la classe Guide ne connaît pas la classe spécifique de la classe Builder. ** Vous pouvez le remplacer parce que vous ne le connaissez pas, et la valeur en tant que pièce augmente parce que vous pouvez le remplacer. ** **
Cet article et exemple de programme ont été créés à partir des livres suivants.
C'était très facile à comprendre et j'ai beaucoup appris. Je vous remercie. Les explications détaillées des modèles de conception et des exemples de programmes sont écrites, veuillez donc également consulter les livres.
Recommended Posts