Návrhový vzor Builder zahŕňa vlastnosti objektu a umožňuje vám vytvoriť jeho reprezentáciu. Tento vzor vám umožňuje vytvárať zložité objekty s rôznymi vlastnosťami, aj keď patria do rovnakej triedy.
Typická trieda objektov obsahuje atribúty, konštruktory a metódy. Vzor zostavovateľov vám umožňuje extrahovať konštrukčnú logiku z triedy objektov a umiestniť ju do tried nazývaných zostavovatelia. Potom môžete použiť tieto triedy staviteľov na vytvorenie rôznych variácií toho istého objektu.
Implementácia Builder Pattern v Jave
Dobrým príkladom stavebného vzoru je systém objednávania pizze, ktorý umožňuje zákazníkom vybrať si rôzne možnosti polevy.
Trieda produktov
Jedným z prístupov je vytvoriť z tvorcu rozhranie, ale najprv budete musieť vytvoriť triedu produktov. Produkt v tejto vzorovej aplikácii je pizza.
verejnostitriedaPizza{
// vlastnosti
súkromnéint číslo objednávky;
súkromné Reťazec cesto na pizzu;
súkromné Reťazec polevy;
// getters a setters
verejnostiintgetOrderNumber(){
vrátiť číslo objednávky;
}
verejnostineplatnésetOrderNumber(int číslo objednávky){
toto.číslo objednávky = číslo objednávky;
}
verejnosti Reťazec getPizzaDough(){
vrátiť cesto na pizzu;
}
verejnostineplatnénastaviťPizzaDough(Cesto na pizzu){
toto.pizzaDough = pizzaCesto;
}
verejnosti Reťazec getTopping(){
vrátiť polevy;
}
verejnostineplatnésetTopping(poleva na šnúrku){
toto.zálievka = zálievka;
}
}
Trieda staviteľov
Pizza triedy Java má tri vlastnosti a ich príslušné getry a nastavovače, ale neexistujú žiadne metódy konštruktéra. Rozhranie tvorcu vám umožní vytvoriť každý aspekt objektu pizze samostatne. Potom vám umožní získať celý predmet pizze.
verejnostirozhranieStaviteľ{
verejnostineplatnévytvortePizzaDough();
verejnostineplatnévytvoriť polevu();
verejnosti Pizza getPizza();
}
Vzorová aplikácia na pizzu umožňuje zákazníkom objednať si ľubovoľné polevy, ako sú syr, feferónky, cibuľa alebo rôzne kombinácie. Preto jedna pizza, ktorú si zákazník objedná, je syr.
verejnostitriedaCheesePizzaBuildernáradiaStaviteľ{
súkromné Pizza pizza;
verejnostiCheesePizzaBuilder(){
toto.pizza = Nový Pizza();
}
@Prepísať
verejnostineplatnévytvortePizzaDough(){
toto.pizza.setPizzaDough("cesto");
}
@Prepísať
verejnostineplatnévytvoriť polevu(){
toto.pizza.setTopping("syr");
}
@Prepísať
verejnosti Pizza getPizza(){
vrátiťtoto.pizza;
}
}
Trieda CheesePizzaBuilder implementuje rozhranie Builder a používa ho na vytvorenie novej syrovej pizze. Toto je jedna reprezentácia objektu Pizza. Robí to tiež spôsobom, ktorý je nezávislý od triedy Pizza.
Trieda CheesePizzaBuilder nevie veľa o triede Pizza, vie len to, čo potrebuje vedieť, aby dokončila svoju funkciu. Vie, že trieda Pizza má vlastnosť cesto a polevu a nastavuje tieto vlastnosti na dve špecifické hodnoty, ktoré bude mať každá syrová pizza. Teraz zakaždým, keď aplikácia zavolá triedu CheesePizzaBuilder, vytvorí novú pizzu so syrovou polevou.
Trieda riaditeľa
Trieda riaditeľa je kľúčovým aspektom vzoru staviteľa. Jediným účelom triedy konkrétnych staviteľov je vytvoriť špecifický objekt. Dosahuje to vytvorením rôznych častí objektu oddelene.
Avšak, stavebné triedy betónu nepoznajú algoritmus. Žiadna z tried staviteľov nevie pripraviť cesto pred pridaním polevy. Toto je funkcia triedy riaditeľa.
verejnostitriedariaditeľ{
súkromné Staviteľ pizzaBuilder;
verejnostiriaditeľ(Builder pizzaBuilder){
toto.pizzaBuilder = pizzaBuilder;
}
verejnosti Pizza getPizza(){
vrátiťtoto.pizzaBuilder.getPizza();
}
verejnostineplatnémakePizza(){
toto.pizzaBuilder.createPizzaDough();
toto.pizzaBuilder.createTopping();
}
}
Trieda Director používa na výrobu pizze rozhranie tvorcu. Je to strážca algoritmu.
Výhody použitia návrhového vzoru Builder
Hlavnou výhodou použitia konštrukčného vzoru Builder je jeho schopnosť zapuzdrenia. Toto je kľúčový aspekt softvérového inžinierstva, pretože pomáha pri vývoji bezpečných aplikácií.
Ďalšou výhodou tohto dizajnového vzoru je jeho stavebný prístup. Umožňuje vám vytvárať viackrokové procesy, kde je každý krok nezávislý, čo uľahčuje ladenie.