[JAVA] Modèle de conception ~ Constructeur ~

1.Tout d'abord

Voici un résumé du ** modèle Builder ** dans le modèle de conception GoF.

2. Quel est le modèle Builder?

3. Exemple de diagramme de classes

Builder.PNG

4. Exemple de programme

Un programme qui produit des documents au format texte brut et HTML.

4-1. Classe Builder

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

4-2. Cours de guide

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

4-3. Classe TextBuilder

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

4-3. Classe HTMLBuilder

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

4-5. Classe principale

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

4-6. Résultat de l'exécution

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

5. Avantages

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

  1. GitHub

7. Liste des modèles de conception

8. Référence

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

Modèle de conception ~ Constructeur ~
Modèle de conception (2): constructeur
Modèle de constructeur
Modèle de constructeur
Modèle de conception ~ Visiteur ~
Modèle de conception Java
Modèle de conception ~ Proxy ~
Modèle de conception ~ État ~
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Singleton ~
Modèle de conception ~ Composite ~
Modèle de conception (1): AbstractFactory
Modèle de conception ~ Commande ~
Modèle de conception ~ Itérateur ~
Modèle de conception ~ Façade ~
Modèle de conception ~ Pont ~
Modèle de conception ~ Médiateur ~
Modèle de conception ~ Décorateur ~
Modèle de conception ~ Interprète ~
Modèle de conception ~ Observateur ~
Modèle de conception ~ Prototype ~
Modèle de conception ~ Memento ~
Modèle de conception ~ Adaptateur ~
Modèle de conception ~ Poids mouche ~
Modèle de conception C ++ (modèle TemplateMethod)
Modèle de conception ~ Méthode d'usine ~
Modèle de conception ~ Usine abstraite ~
Résumé du modèle de conception du GoF
Modèle de conception ~ Méthode de modèle ~
Modèle de générateur (Java effectif)
Résumé du modèle de conception Java
Introduction aux modèles de conception (Builder)
Modèle de conception ~ Chaîne de responsabilité ~
[Design pattern] Bibliothèque de base Java
Repenser les modèles de conception avec les expressions lambda Java8 et Stream --Builder pattern -
Modèle de conception par la méthode Ruby Template Mémo de modèle
Modèle de conception mâché C #: TemplateMethod
Exemple d'application du modèle de conception (n ° 1)
Modèle de conception Java pour débutant (modèle de méthode d'usine)
Modèle de prototype
Motif médiateur
Modèle d'itérateur
Motif composite
Modèle d'objet mère et modèle de générateur de données de test
Modèle d'observateur
Modèle de pont
Modèle de commande
Modèle de stratégie
Modèle d'itérateur
Modèle de visiteur
Modèle d'adaptateur
Modèle de proxy
Modèle de stratégie
Motif composite
Motif singleton
Motif singleton
Modèle de prototype
[Modèle de conception] Logique commune avec la méthode de modèle
Modèle de façade
Motif décorateur
Modèle de poids mouche