[JAVA] Entwurfsmuster ~ Builder ~

1. Zuallererst

Hier ist eine Zusammenfassung des ** Builder-Musters ** im GoF-Entwurfsmuster.

2. Was ist das Builder-Muster?

3. Beispielklassendiagramm

Builder.PNG

4. Beispielprogramm

Ein Programm, das Dokumente im Nur-Text- und HTML-Format ausgibt.

4-1. Builder-Klasse

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

4-2. Führungsklasse

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

4-3. TextBuilder-Klasse

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

4-3. HTMLBuilder-Klasse

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;
	}
}

4-5 Hauptklasse

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

4-6 Ausführungsergebnis

4-6-1. Text
==============================
"Ü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 bbq.PNG

5. Vorteile

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. ** ** **

  1. GitHub

7. Liste der Entwurfsmuster

8. Referenz

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

Entwurfsmuster ~ Builder ~
Entwurfsmuster (2): Builder
Builder-Muster
Builder-Muster
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (1): AbstractFactory
Entwurfsmuster ~ Befehl ~
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Dekorateur ~
Entwurfsmuster ~ Interpreter ~
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
C ++ - Entwurfsmuster (TemplateMethod-Muster)
Entwurfsmuster ~ Fabrikmethode ~
Entwurfsmuster ~ Abstrakte Fabrik ~
Zusammenfassung des GoF-Entwurfsmusters
Entwurfsmuster ~ Vorlagenmethode ~
Builder-Muster (effektives Java)
Zusammenfassung des Java-Entwurfsmusters
Einführung in Entwurfsmuster (Builder)
Entwurfsmuster ~ Verantwortungskette ~
[Entwurfsmuster] Java-Kernbibliothek
Überdenken von Entwurfsmustern mit Java8-Lambda-Ausdrücken und Stream - Builder-Muster -
Entwurfsmuster nach Ruby Template-Methode Musternotiz
C # gekautes Designmuster: TemplateMethod
Anwendungsbeispiel für Entwurfsmuster (Nr. 1)
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Prototypmuster
Vermittlermuster
Iteratormuster
Zusammengesetztes Muster
Objektmuttermuster und Test Data Builder-Muster
Beobachtermuster
Brückenmuster
Befehlsmuster
Strategiemuster
Iteratormuster
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Singleton-Muster
Singleton-Muster
Prototypmuster
[Entwurfsmuster] Allgemeine Logik mit der Vorlagenmethode
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster