Builders designmönster kapslar in egenskaperna hos ett objekt och låter dig konstruera en representation av det. Detta mönster låter dig konstruera komplexa objekt med olika egenskaper även om de tillhör samma klass.
En typisk objektklass innehåller attribut, konstruktorer och metoder. Builder-mönstret låter dig extrahera konstruktionslogiken från objektklassen och placera den i klasser som kallas byggare. Du kan sedan använda dessa byggarklasser för att skapa olika varianter av samma objekt.
Implementering av Builder-mönstret i Java
Ett bra exempel på byggmönstret är ett pizzabeställningssystem som låter kunderna välja olika påläggsalternativ.
Produktklassen
Ett tillvägagångssätt är att göra byggaren till ett gränssnitt, men du måste skapa en produktklass först. Produkten i denna exempelapplikation är en pizza.
offentligklassPizza{
// egenskaper
privat
int ordernummer;
privat Sträng pizzadeg;
privat Sträng garnering;
// getters och setters
offentligintgetOrderNumber(){
lämna tillbaka ordernummer;
}
offentligtomhetsetOrderNumber(int ordernummer){
detta.orderNumber = orderNumber;
}
offentlig Sträng få PizzaDough(){
lämna tillbaka pizzadeg;
}
offentligtomhetsetPizzaDough(Sträng pizzaDeg){
detta.pizzaDough = pizzaDough;
}
offentlig Sträng getTopping(){
lämna tillbaka garnering;
}
offentligtomhetsetTopping(strängtoppning){
detta.topping = topping;
}
}
Byggmästarklassen
Pizzan Java klass har tre fastigheter och deras respektive getters och setters, men det finns inga konstruktörsmetoder. Byggarens gränssnitt låter dig skapa varje aspekt av pizzaobjektet separat. Det låter dig sedan hämta hela pizzaobjektet.
offentliggränssnittByggare{
offentligtomhetskapa PizzaDough();
offentligtomhetskapa Topping();
offentlig Pizza getPizza();
}
Exempelpizzaapplikationen låter kunder beställa valfri pålägg, såsom ost, pepperoni, lök eller olika kombinationer. Därför är en pizza som en kund kommer att beställa ost.
offentligklassCheesePizzaBuilderredskapByggare{
privat Pizza pizza;
offentligCheesePizzaBuilder(){
detta.pizza = ny Pizza();
}
@Åsidosätta
offentligtomhetskapa PizzaDough(){
detta.pizza.setPizzaDough("Deg");
}
@Åsidosätta
offentligtomhetskapa Topping(){
detta.pizza.setTopping("Ost");
}
@Åsidosätta
offentlig Pizza getPizza(){
lämna tillbakadetta.pizza;
}
}
Klassen CheesePizzaBuilder implementerar Builder-gränssnittet och använder det för att skapa en ny ostpizza. Detta är en representation av Pizza-objektet. Det gör den också på ett sätt som är oberoende av pizzaklassen.
CheesePizzaBuilder-klassen vet inte mycket om Pizza-klassen, den vet bara vad den behöver veta för att slutföra sin funktion. Den vet att pizzaklassen har en deg- och en toppningsegenskap, och den sätter dessa egenskaper till två specifika värden som varje ostpizza kommer att ha. Nu varje gång applikationen anropar CheesePizzaBuilder-klassen kommer den att skapa en ny Pizza som har ostpålägg.
Direktörsklassen
Regissörsklassen är en avgörande aspekt av byggmästarmönstret. Det enda syftet med en betongbyggarklass är att skapa ett specifikt objekt. Den uppnår detta genom att skapa de olika delarna av ett objekt separat.
Byggbetongklasserna är dock omedvetna om algoritmen. Ingen av byggarklasserna vet hur man bygger degen innan man lägger på toppingen. Detta är regissörsklassens funktion.
offentligklassDirektör{
privat Builder pizzaBuilder;
offentligDirektör(Builder pizzaBuilder){
detta.pizzaBuilder = pizzaBuilder;
}
offentlig Pizza getPizza(){
lämna tillbakadetta.pizzaBuilder.getPizza();
}
offentligtomhetgöra pizza(){
detta.pizzaBuilder.createPizzaDough();
detta.pizzaBuilder.createTopping();
}
}
Klassen Director använder byggargränssnittet för att göra pizzor. Det är algoritmens ägare.
Fördelarna med att använda Builder Design Pattern
Den största fördelen med att använda designmönstret är dess inkapslingsegenskaper. Detta är en avgörande aspekt av mjukvaruutveckling, eftersom det hjälper till vid utvecklingen av säkra applikationer.
En annan fördel med detta designmönster är dess tillvägagångssätt för objektkonstruktion. Det låter dig skapa flerstegsprocesser, där varje steg är oberoende, vilket gör felsökningen enklare.