Návrhový vzor Builder zapouzdřuje vlastnosti objektu a umožňuje vám vytvořit jeho reprezentaci. Tento vzor vám umožňuje vytvářet složité objekty s různými vlastnostmi, i když patří do stejné třídy.
Typická třída objektů obsahuje atributy, konstruktory a metody. Vzor stavitele vám umožňuje extrahovat konstrukční logiku z třídy objektů a umístit ji do tříd zvaných stavitelé. Tyto třídy tvůrců pak můžete použít k vytvoření různých variant stejného objektu.
Implementace Builder Pattern v Javě
Dobrým příkladem stavebního vzoru je systém objednávání pizzy, který umožňuje zákazníkům vybrat si různé možnosti polevy.
Třída produktu
Jedním z přístupů je vytvořit z tvůrce rozhraní, ale nejprve budete muset vytvořit třídu produktu. Produktem v této ukázkové aplikaci je pizza.
veřejnosttřídaPizza{
// vlastnosti
soukroméint číslo objednávky;
soukromé
Tětiva těsto na pizzu;
soukromé Tětiva poleva;
// getters a setters
veřejnostintgetOrderNumber(){
vrátit se číslo objednávky;
}
veřejnostprázdnotasetOrderNumber(int číslo objednávky){
tento.orderNumber = orderNumber;
}
veřejnost Tětiva getPizzaDough(){
vrátit se těsto na pizzu;
}
veřejnostprázdnotanastavitPizzaTough(Těsto na pizzu){
tento.pizzaTough = pizzaTěsto;
}
veřejnost Tětiva getTopping(){
vrátit se poleva;
}
veřejnostprázdnotasetTopping(zálivka){
tento.topping = zálivka;
}
}
Třída Builder
Pizza třída Java má tři vlastnosti a jejich příslušné getry a settery, ale žádné neexistují konstruktorové metody. Rozhraní tvůrce vám umožní vytvořit každý aspekt objektu pizza samostatně. Poté vám umožní získat celý předmět pizzy.
veřejnostrozhraníStavitel{
veřejnostprázdnotavytvořitPizzaDough();
veřejnostprázdnotavytvořitTopping();
veřejnost Pizza getPizza();
}
Ukázková aplikace pro pizzu umožňuje zákazníkům objednat si libovolné polevy, jako je sýr, feferonky, cibule nebo různé kombinace. Jedna pizza, kterou si zákazník objedná, je tedy sýr.
veřejnosttřídaCheesePizzaBuildernářadíStavitel{
soukromé Pizza pizza;
veřejnostCheesePizzaBuilder(){
tento.pizza = Nový Pizza();
}
@Přepsat
veřejnostprázdnotavytvořitPizzaDough(){
tento.pizza.setPizzaTough("Těsto");
}
@Přepsat
veřejnostprázdnotavytvořitTopping(){
tento.pizza.setTopping("Sýr");
}
@Přepsat
veřejnost Pizza getPizza(){
vrátit setento.pizza;
}
}
Třída CheesePizzaBuilder implementuje rozhraní Builder a používá jej k vytvoření nové sýrové pizzy. Toto je jedna reprezentace objektu Pizza. Dělá to také způsobem, který je nezávislý na třídě Pizza.
Třída CheesePizzaBuilder o třídě Pizza mnoho neví, ví pouze to, co potřebuje vědět, aby dokončila svou funkci. Ví, že třída Pizza má vlastnost těsto a polevu, a nastavuje tyto vlastnosti na dvě konkrétní hodnoty, které bude mít každá sýrová pizza. Nyní pokaždé, když aplikace zavolá třídu CheesePizzaBuilder, vytvoří novou pizzu se sýrovou polevou.
Třída ředitele
Třída ředitel je klíčovým aspektem vzoru stavitelů. Jediným účelem třídy konkrétního stavitele je vytvořit konkrétní objekt. Dosahuje toho vytvořením různých částí objektu odděleně.
Třídy betonu stavitele však o algoritmu nevědí. Žádná ze tříd stavitelů neví, jak připravit těsto před přidáním polevy. Toto je funkce ředitelské třídy.
veřejnosttřídaŘeditel{
soukromé Stavitel pizzaBuilder;
veřejnostŘeditel(Builder pizzaBuilder){
tento.pizzaBuilder = pizzaBuilder;
}
veřejnost Pizza getPizza(){
vrátit setento.pizzaBuilder.getPizza();
}
veřejnostprázdnotamakePizza(){
tento.pizzaBuilder.vytvořitPizzaTough();
tento.pizzaBuilder.createTopping();
}
}
Třída Director používá k výrobě pizzy rozhraní tvůrce. Je to strážce algoritmu.
Výhody použití návrhového vzoru Builder
Hlavní výhodou použití návrhového vzoru Builder je jeho schopnost zapouzdření. To je zásadní aspekt softwarového inženýrství, protože pomáhá při vývoji bezpečných aplikací.
Další výhodou tohoto designového vzoru je jeho objektová konstrukce. Umožňuje vytvářet vícekrokové procesy, kde je každý krok nezávislý, což usnadňuje ladění.