Definition: Trennen Sie die Konstruktion eines komplexen Objekts von seiner Darstellung, damit der gleiche Konstruktionsprozess unterschiedliche Darstellungen erzeugen kann.
Typ: Erstellen Sie Klassenmusterklassendiagramm:
Vier Elemente
Code -Implementierung
Abstrakte Produktklasse:
Paketbauer; Import Java.util.ArrayList; public Abstract Class AbstractProduct {// Ausführungsauftrag private ArrayList <string> part = new ArrayList <string> (); öffentliche abstrakte Leeredosen (); öffentliche abstrakte Leerunterbrechung (); // endgültige Unterklassen können nicht überschrieben werden. if (actionName.equals ("dosomething") {this.dosomething (); } else if (actionName.equals ("dootherthing")) {this.dootherthing (); }}} // Finale, Unterklassen können nicht überschrieben werden. }}Produktimplementierungskategorie:
Paketbauer; Das Produkt der öffentlichen Klasse erweitert AbstractProduct {// Unterklasse Spezifische Beschreibung Schritte public void dosomething () {System.out.println ("wird etwas tun ..."); } public void dootherthing () {System.out.println ("Etwas hat getan. }}Builder abstrakte Klasse:
Paketbauer; Import Java.util.ArrayList; public abstract Class Builder {// Verschiedene Teile des Produkts festlegen, um verschiedene Produkte zu erhalten, öffentliche abstrakte Void -SetPart (ArrayList <string> Teil); // Product Public Abstract Product BuildProduct () erstellen; }Builder -Implementierungsklasse:
Paketbauer; Import Java.util.ArrayList; Public Class ConcreteProdukt erweitert Builder {Private Product product = new Product (); public void setPart (ArrayList <string> part) {this.product.setPart (Teil); } public Product BuildProduct () {return this.product; }}Regisseur Kategorie:
Paketbauer; Import Java.util.ArrayList; // Die Produktionsreihenfolge verschiedener Produkte neu verpacken und die Details des hochrangigen öffentlichen Klassendirektors {private arrayList <string> part = new ArrayList <string> (); privat Builder Builder = new ConcreteProduct (); öffentliches Produkt getAaproduct () {this.Part.Clear (); this.part.add ("Dosen etwas"); this.part.add ("Dootherthing"); Builder.SetPart (Teil); return Builder.BuildProduct (); }}Kunde:
Paketbauer; öffentliche Klasse Client {public static void main (String [] args) {Director Director = New Director (); System.out.println ("wird 10 Produkte generieren"); für (int i = 1; i <11; i ++) {System.out.println ("Thread" + i + "Produkte"); Director.Getaproduct (). Executive (); System.out.println (); }}}
Vorteile des Erbauermodells
Erstens hat das Builder -Modell eine sehr gute Verkapselung. Die Verwendung des Builder -Modells kann Änderungen effektiv zusammenfassen. Im Szenario der Verwendung des Builder -Modells sind allgemeine Produktkategorien und Builder -Kategorien relativ stabil. Daher kann die Einkapselung der Hauptgeschäftslogik in der Kategorie Director insgesamt eine bessere Stabilität erzielen.
Zweitens ist der Builder -Modus leicht zu erweitern. Wenn es eine neue Anforderung gibt, kann dies durch die Implementierung einer neuen Builder -Klasse erfolgen. Grundsätzlich müssen der Code, der zuvor getestet und bestanden wurde, nicht geändert werden. Daher besteht kein Risiko für die ursprüngliche Funktion.
Der Unterschied zwischen dem Erbauermodell und dem Fabrikmodell
Wir können sehen, dass das Builder -Modell dem Fabrikmodell sehr ähnlich ist. Insgesamt hat das Builder -Modell nur eine "Regisseur" -Rolle mehr als das Fabrikmodell. Wenn die Direktorklasse als endgültiger Kunde angesehen wird, kann der verbleibende Teil des Diagramms als ein einfaches Fabrikmuster angesehen werden, wenn die Direktor -Klasse als endgültiger Kunde angesehen wird.
Im Vergleich zum Werksmodell wird das Builder -Modell im Allgemeinen verwendet, um komplexere Objekte zu erstellen. Da der Prozess der Objekterstellung komplexer ist, ist der Prozess der Objekterstellung unabhängig vom Objekterkennungsprozess, um eine neue Klasse zu bilden - die Director -Klasse. Mit anderen Worten, das Fabrikmodell verkauft den gesamten Erstellungsprozess des Objekts in der Fabrikklasse, und die Fabrikklasse bietet dem Kunden das Endprodukt. Während der Bauherrenklasse bietet die Builder -Klasse im Allgemeinen nur die Konstruktion jeder Komponente in der Produktklasse und liefert den spezifischen Bauprozess an die Direktor -Klasse. Die Direktor -Klasse ist dafür verantwortlich, jede Komponente nach bestimmten Regeln in ein Produkt zu formulieren und dann das geformte Produkt an den Kunden zu liefern.
Zusammenfassen
Das Builder -Modell ähnelt dem Fabrikmodell. Sie sind beide Builder -Modell und die anwendbaren Szenarien sind ebenfalls sehr ähnlich. Wenn der Bau des Produkts kompliziert ist, verwenden Sie im Allgemeinen das Werksmodell. Wenn der Bau des Produkts komplizierter ist, verwenden Sie bitte das Builder -Modell.