Baumeister-Muster

Das Baumeister-Muster ist ein Gegenstand-Entwicklungssoftwaredesignmuster. Die Absicht ist zu abstrakten Schritten des Aufbaus von Gegenständen, so dass verschiedene Durchführungen dieser Schritte verschiedene Darstellungen von Gegenständen bauen können. Häufig wird das Baumeister-Muster verwendet, um Produkte in Übereinstimmung mit dem zerlegbaren Muster zu bauen.

Definition

Die Absicht des Baumeister-Designmusters ist, den Aufbau eines komplizierten Gegenstands von seiner Darstellung zu trennen. Durch das Tun so kann derselbe Bauprozess verschiedene Darstellungen schaffen.

Struktur

Baumeister

:Abstract verbinden, um Gegenstände (Produkt) zu schaffen.

Konkreter Baumeister

:Provides-Durchführung für den Baumeister. Es ist ein Gegenstand, der fähig ist, andere Gegenstände zu bauen. Konstruktionen und sammeln Teile, um die Gegenstände zu bauen.

Direktor

:The-Direktor Klasse ist dafür verantwortlich, die richtige Folge der Gegenstand-Entwicklung zu führen. Es empfängt einen Konkreten Baumeister als ein Parameter und führt die notwendigen Operationen darauf durch.

Produkt

Endgegenstand von:The, der vom Direktor geschaffen wird, der Baumeister verwendet.

Nützliche Tipps

  • Baumeister konzentriert sich darauf, einen komplizierten Gegenstand nach und nach zu bauen. Abstrakte Fabrik betont eine Familie von Produktgegenständen (entweder einfach oder kompliziert). Baumeister gibt das Produkt als ein Endschritt zurück, aber so weit die Abstrakte Fabrik betroffen wird, wird das Produkt sofort zurückgegeben.
  • Baumeister baut häufig eine Zusammensetzung.
  • Häufig beginnen Designs Verwenden-Fabrikmethode (weniger komplizierte, anpassbarere, Unterklassen wuchern), und entwickeln Sie sich zur Abstrakten Fabrik, dem Prototyp oder dem Baumeister (flexibler, komplizierter), weil der Entwerfer entdeckt, wo mehr Flexibilität erforderlich ist.
  • Manchmal sind Creational-Muster ergänzend: Baumeister kann eines der anderen Muster verwenden, um durchzuführen, welche Bestandteile gebaut werden. Abstrakte Fabrik, Baumeister und Prototyp können Singleton in ihren Durchführungen verwenden.
  • Baumeister sind gute Kandidaten für eine fließende Schnittstelle.

Beispiele

C#

das Verwenden des Systems;

namespace BuilderPattern

{\

//Baumeister - abstrakte Schnittstelle, um Gegenstände (das Produkt, in diesem Fall) zu schaffen

abstrakte Klasse PizzaBuilder

{\

geschützte Pizza-Pizza;

öffentliche Pizza GetPizza

{\

geben Sie Pizza zurück;

}\

öffentlicher leerer CreateNewPizzaProduct

{\

Pizza = neue Pizza ;

}\

öffentlicher abstrakter leerer BuildDough ;

öffentlicher abstrakter leerer BuildSauce ;

öffentlicher abstrakter leerer BuildTopping ;

}\

//Konkreter Baumeister - stellt Durchführung für den Baumeister zur Verfügung; ein Gegenstand, der fähig ist, andere Gegenstände zu bauen.

//Konstruktionen und sammeln Teile, um die Gegenstände zu bauen

Klasse HawaiianPizzaBuilder: PizzaBuilder

{\

Publikum überreitet leeren BuildDough

{\

Pizza. Geld = "Kreuz";

}\

Publikum überreitet leeren BuildSauce

{\

Pizza. Soße = "mild";

}\

Publikum überreitet leeren BuildTopping

{\

Pizza. Die Spitze = "ham+pineapple";

}\ }\ //Konkreter Baumeister - stellt Durchführung für den Baumeister zur Verfügung; ein Gegenstand, der fähig ist, andere Gegenstände zu bauen. //Konstruktionen und sammeln Teile, um die Gegenstände zu bauen

Klasse SpicyPizzaBuilder: PizzaBuilder

{\ Publikum überreitet leeren BuildDough {\

Pizza. Geld = "Pfanne hat gebacken";

}\ Publikum überreitet leeren BuildSauce {\

Pizza. Soße = "heiß";

}\ Publikum überreitet leeren BuildTopping {\

Pizza. Die Spitze = "pepperoni + Salami";

}\ }\

//Direktor - verantwortlich dafür, die richtige Folge der Gegenstand-Entwicklung zu führen.

//Empfängt einen Konkreten Baumeister als ein Parameter und führt die notwendigen Operationen darauf durch.

Klassenkoch

{\

privater PizzaBuilder _pizzaBuilder;

öffentlicher leerer SetPizzaBuilder (PizzaBuilder pb)

{\

_pizzaBuilder = pb;

}\ öffentliche Pizza GetPizza {\

geben Sie _pizzaBuilder zurück. GetPizza ;

}\

öffentlicher leerer ConstructPizza

{\

_pizzaBuilder. CreateNewPizzaProduct ;

_pizzaBuilder. BuildDough ;

_pizzaBuilder. BuildSauce ;

_pizzaBuilder. BuildTopping ;

}\ }\

//Produkt - Der Endgegenstand, der vom Direktor geschaffen wird, der Baumeister verwendet

öffentliche Klassenpizza

{\

private Schnur _dough = Schnur. Leer;

private Schnur _sauce = Schnur. Leer;

private Schnur _topping = Schnur. Leer;

öffentliches Schnur-Geld

{\

kommen Sie {geben _dough zurück; }\

Satz {_dough = Wert; }\

}\

öffentliche Schnur-Soße

{\

kommen Sie {geben _sauce zurück; }\

Satz {_sauce = Wert; }\

}\

öffentliche Schnur, die Übersteigt

{\

kommen Sie {geben _topping zurück; }\

Satz {_topping = Wert; }\

}\ }\

Klassenprogramm

{\

statische leere Hauptsache (Schnur [] args)

{\

PizzaBuilder hawaiianPizzaBuilder = neuer HawaiianPizzaBuilder ;

Kochen Sie Koch = neuer Koch ;

kochen. SetPizzaBuilder (hawaiianPizzaBuilder);

kochen. ConstructPizza ;

//schaffen Sie das Produkt

Pizza hawaiisch = Koch. GetPizza ;

PizzaBuilder spicyPizzaBuilder = neuer SpicyPizzaBuilder ;

kochen. SetPizzaBuilder (spicyPizzaBuilder);

kochen. ConstructPizza ;

//schaffen Sie ein anderes Produkt

Pizza würzig = Koch. GetPizza ;

}\ }\}\</Quelle>

Java

/ ** "Produkt" * /

Klassenpizza {\

privates Schnur-Geld ="";

private Schnur-Soße ="";

private Schnur-Spitze ="";

öffentliche Leere setDough (Schnur-Geld) {this.dough = Geld; }\

öffentliche Leere setSauce (Schnur-Soße) {this.sauce = Soße; }\

öffentliche Leere setTopping (Schnur-Spitze) {this.topping = Spitze; }\

}\

/ ** "Abstrakter Baumeister" * /

abstrakte Klasse PizzaBuilder {\

geschützte Pizza-Pizza;

öffentliche Pizza getPizza {gibt Pizza zurück; }\

öffentliche Leere createNewPizzaProduct {Pizza = neue Pizza ; }\

öffentliche abstrakte Leere buildDough ;

öffentliche abstrakte Leere buildSauce ;

öffentliche abstrakte Leere buildTopping ;

}\

/ ** "ConcreteBuilder" * /

Klasse HawaiianPizzaBuilder erweitert PizzaBuilder {\

öffentliche Leere buildDough {pizza.setDough ("Kreuz"); }\

öffentliche Leere buildSauce {pizza.setSauce ("mild"); }\

öffentliche Leere buildTopping {pizza.setTopping ("ham+pineapple"); }\

}\ / ** "ConcreteBuilder" * /

Klasse SpicyPizzaBuilder erweitert PizzaBuilder {\

öffentliche Leere buildDough {pizza.setDough ("Pfanne hat" gebacken); }\

öffentliche Leere buildSauce {pizza.setSauce ("heiß"); }\

öffentliche Leere buildTopping {pizza.setTopping ("pepperoni+salami"); }\

}\

/ ** "Direktor" * /

Klassenkellner {\

privater PizzaBuilder pizzaBuilder;

öffentliche Leere setPizzaBuilder (PizzaBuilder pb) {pizzaBuilder = pb; }\

öffentliche Pizza getPizza {gibt pizzaBuilder.getPizza zurück; }\

öffentliche Leere constructPizza {\

pizzaBuilder.createNewPizzaProduct ;

pizzaBuilder.buildDough ;

pizzaBuilder.buildSauce ;

pizzaBuilder.buildTopping ;

}\ }\

/ ** Ein Kunde, der eine Pizza bestellt. * /

Klasse BuilderExample {\

öffentliche statische leere Hauptsache (Schnur [] args) {\

Kellner-Kellner = neuer Kellner ;

PizzaBuilder hawaiian_pizzabuilder = neuer HawaiianPizzaBuilder ;

PizzaBuilder spicy_pizzabuilder = neuer SpicyPizzaBuilder ;

waiter.setPizzaBuilder (hawaiian_pizzabuilder);

waiter.constructPizza ;

Pizza-Pizza = waiter.getPizza ;

}\ }\</Quelle>

C ++

  1. einschließen
einschließen

das Verwenden namespace std;

//"Produkt"

Klassenpizza {\

Publikum:

leeres Geld (const string& Geld) {\

dough_ = Geld;

}\

leere Soße (const string& Soße) {\

sauce_ = Soße;

}\

Leere-Spitze (const string& übersteigend) {\

topping_ = Spitze;

}\

Leere offen const {\

cout

}\

Leere constructPizza {\

pizzabuilder_-> buildDough ;

pizzabuilder_-> buildSauce ;

pizzabuilder_-> buildTopping ;

}\

privat:

PizzaBuilder* pizzaBuilder _;

};

int Hauptsache {\

Kochen Sie Koch;

cook.pizzaBuilder (neuer HawaiianPizzaBuilder);

cook.constructPizza ;

Pizza hawaiisch = cook.getPizza ;

hawaiian.open ;

cook.pizzaBuilder (neuer SpicyPizzaBuilder);

cook.constructPizza ;

Pizza würzig = cook.getPizza ;

spicy.open ;

}\</Quelle>

Links


Karada / Fabrikmethode-Muster
Impressum & Datenschutz