1. Definition und UML-Modellierungsdiagramm

Trenne die Konstruktion eines komplexen Objekts von seiner Darstellung, sodass derselbe Konstruktionsprozess verschiedene Darstellungen erzeugen kann.

2. Anwendungsszenarien:

Mehrere Komponenten oder Teile können zu einem Objekt zusammengesetzt werden, aber die resultierenden Operationsergebnisse sind dieselben.

Die Produktklasse ist sehr komplex, oder unterschiedliche Aufrufreihenfolgen in der Produktklasse erzeugen unterschiedliche Effekte.

Das Initialisieren eines Objekts ist besonders komplex, z. B. wenn mehrere Konstruktoren verwendet werden oder viele Parameter vorhanden sind, die alle Standardwerte haben.

3. Kernklassen

  • (1) Abstrakte Produktklasse: Computer.
  • (2) Builder: der abstrakte Builder, der den Zusammenbau des Produkts standardisiert. Unterklassen implementieren in der Regel den spezifischen Montageprozess.
  • (3) MacbookBuilder: die konkrete Builder-Klasse, die Klasse, die konkret Objekte erstellt.
  • (4) Directror: vereinheitlicht den Montageprozess.

Fokus auf den Zusammenbau eines Computers, hauptsächlich das Zusammenbauen des Hosts, das Einrichten des Betriebssystems und das Einrichten des Monitors.

4. Spezifische Verwendung

4.1 Abstrakte Computer-Klasse

Computer.java

public abstract class Computer { protected String mBoard; protected String mDisplay; protected String mOs; protected Computer(){ } public void setBoard(String board){ mBoard=board; } public void setDisplay(String display) { this.mDisplay = display; } public abstract void setOs() ; @Override public String toString() { return "Computer{" + "mBoard='" + mBoard + '\'' + ", mDisplay='" + mDisplay + '\'' + ", mOs='" + mOs + '\'' + '}'; } }

4.2 Konkrete Produktklasse MacBook

MacBook.java

public class MacBook extends Computer{ protected MacBook() { } @Override public void setOs() { mOs="Mac OS X 12"; } }

4.3 Abstrakter Builder

Builder.java

public abstract class Builder { abstract void buildBoard(String board); abstract void buildDisplay(String display); abstract void buildOs(); abstract Computer build(); }

4.4 Konkreter Builder

MacBookBuilder.java

public class MacBookBuilder extends Builder { private Computer mComputer=new MacBook(); @Override void buildBoard(String board) { mComputer.setBoard(board); } @Override void buildDisplay(String display) { mComputer.setDisplay(display); } @Override void buildOs() { mComputer.setOs(); } @Override Computer build() { return mComputer; } }

4.5 Director-Klasse, verantwortlich für die konkrete Konstruktion von Computer

Director.java

public class Director { Builder mBuilser=null; public Director(Builder builer) { this.mBuilser = builer; } public void construct(String board,String display){ mBuilser.buildDisplay(display); mBuilser.buildBoard(board); mBuilser.buildOs(); } }

4.6 Konkrete Verwendung

Test.java

public class Test { public static void main(String[] args){ Builder builder=new MacBookBuilder(); Director pcDirector=new Director(builder); pcDirector.construct("Intel Motherboard","Retina Display"); Computer computer = builder.build(); System.out.println(computer.toString()); } }

5. Zusammenfassung

Um komplexe Objekte flexibel zu konstruieren, verfügt das Objekt über mehrere Membervariablen. Beim externen Aufruf ist es nicht notwendig oder praktisch, alle Membervariablen auf einmal zu erstellen. In diesem Fall ist die Verwendung mehrerer Konstruktoren zum Erstellen von Objekten schwer zu warten. An diesem Punkt löst das Builder-Entwurfsmuster dieses Problem, indem es Objekte in der build()-Methode erstellt und den Builder übergibt. Der Builder verwaltet die Membervariablen des übergebenen Objekts.

Autor: OneXzgj

Link: https://www.jianshu.com/p/f958ba891467