[JAVA] Entwurfsmuster (2): Builder

Was ist Builder?

Wenn eine gemeinsame Verarbeitung zwischen mehreren Instanzen erforderlich ist, verstecken Sie diese Verarbeitung Eine Implementierung, die dieselbe Verarbeitung, aber unterschiedliche interne Verarbeitung ermöglicht. Hier werden Japaner und Amerikaner basierend auf der People-Klasse erstellt, die ein Feld namens mainLanguage hat.

Schritt ①

Erstellen Sie eine Schnittstelle, die die gemeinsame Verarbeitung mehrerer Instanzen definiert. (= Builder-Klasse)

Builder.java


public interface Builder {
	void createMainLanguage(); //Stellen Sie die Hauptsprache ein
	People getResult(); //People-Instanz zurückgeben
}

People.java


public class People {
    //Gegenstand
	private String mainLanguage;

	public String getMainLanguage() {
		return mainLanguage;
	}

	public void setMainLanguage(String mainLanguage) {
		this.mainLanguage = mainLanguage;
	}
	
	void hello() {
		System.out.println("Hallo. Die Hauptsprache ist" + mainLanguage);
	}
}

Schritt ②

Erstellen Sie eine Klasse mit einer Implementierung der definierten Schnittstelle. (= ConcreteBuilder-Klasse) ** Wenn die zu erstellenden Instanztypen zunehmen, generieren und erhöhen Sie diese Klasse **

JapaneseBuilder.java


//Japanischer Baumeister
public class JapaneseBuilder implements Builder {
	private People people;
	
	public JapaneseBuilder() {
		this.people = new People();
	}

	@Override
	public void createMainLanguage() {
		people.setMainLanguage("Japanese"); //Japanisch ist die Hauptsprache
	}

	@Override
	public People getResult() {
		return this.people;
	}
}

AmericanBuilder.java


//Amerikanischer Baumeister
public class AmericanBuilder implements Builder {
	private People people;
	
	public AmericanBuilder() {
		this.people = new People();
	}

	@Override
	public void createMainLanguage() {
		people.setMainLanguage("English"); //Englisch ist die Hauptsprache
	}

	@Override
	public People getResult() {
		return this.people;
	}
}

Schritt ③

Erstellen Sie eine Klasse, die für die eigentliche Instanziierung verantwortlich ist. (= Regieklasse) ** * Stellen Sie sicher, dass die Schnittstelle ein Argument des Konstruktors ist ** Durch die Übergabe von Builder an Director wird es unabhängig von der ConcreteBuilder-Klasse. Mit anderen Worten, Director weiß nicht, was die eigentliche Klasse ConcreteBuilder ist.

Director.java


public class Director {
	private Builder builder;
	
	public Director(Builder builder) {
		this.builder = builder;
	}
	
	public People construct() {
		builder.createMainLanguage();
		return builder.getResult();
	}
}

Wie rufe ich an?

(1) Erstellen Sie eine Builder-Instanz mit einer Builder-Schnittstelle als Typ. Die tatsächliche Verarbeitung hängt zum Zeitpunkt der Generierung von ConcreteBuilder ab. (2) Erstellen Sie eine Director-Instanz mit der Builder-Instanz als Argument.

Main.java


public class Main {
	public static void main(String[] args) {
		if (args[0].equals("Japanese")) {
			//Generieren Sie einen japanischen Builder
			Builder builder = new JapaneseBuilder();
			//Director übergibt gerade die Bulder-Oberfläche, sodass er nicht einmal die interne Implementierung von Builder kennt.
			Director director = new Director(builder);
			People people = director.construct();
			people.hello();
		} else if (args[0].equals("English")) {
			Builder builder = new AmericanBuilder();
			Director director = new Director(builder);
			People people = director.construct();
			people.hello();
		} else {
			throw new IllegalArgumentException();
		}
	}
}

Recommended Posts

Entwurfsmuster ~ Builder ~
Entwurfsmuster (2): Builder
Builder-Muster
Builder-Muster
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Entwurfsmuster ~ Strategie ~
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
Erinnerungsmuster
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