Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

Builder-designmønsteret innkapsler egenskapene til et objekt og lar deg konstruere en representasjon av det. Dette mønsteret lar deg konstruere komplekse objekter med forskjellige egenskaper selv om de tilhører samme klasse.

En typisk objektklasse inneholder attributter, konstruktører og metoder. Byggemønsteret lar deg trekke ut konstruksjonslogikken fra objektklassen og plassere den i klasser kalt byggherrer. Du kan deretter bruke disse byggmesterklassene til å lage forskjellige varianter av det samme objektet.

Implementering av Builder-mønsteret i Java

Et godt eksempel på byggemønsteret er et pizzabestillingssystem som lar kundene velge forskjellige toppingsalternativer.

Produktklassen

En tilnærming er å gjøre byggherren til et grensesnitt, men du må lage en produktklasse først. Produktet i denne prøveapplikasjonen er en pizza.

offentligklassePizza
instagram viewer
{
// egenskaper
privatint ordrenummer;
privat String pizza deig;
privat String topping;

// gettere og settere
offentligintgetOrderNumber(){
komme tilbake ordrenummer;
}

offentligtomromsetOrderNumber(int ordrenummer){
dette.ordreNumber = ordrenummer;
}

offentlig String få PizzaDough(){
komme tilbake pizza deig;
}

offentligtomromsettPizzaDough(String pizzaDough){
dette.pizzaDough = pizzaDough;
}

offentlig String getTopping(){
komme tilbake topping;
}

offentligtomromsetTopping(streng topping){
dette.topping = topping;
}
}

Byggmesterklassen

Pizzaen Java klasse har tre eiendommer og deres respektive gettere og settere, men det er ingen konstruktørmetoder. Byggergrensesnittet lar deg lage hvert aspekt av pizzaobjektet separat. Den vil da tillate deg å hente hele pizzaobjektet.

offentliggrensesnittBygger{
offentligtomromlage PizzaDough();
offentligtomromlage Topping();
offentlig Pizza getPizza();
}

Eksempelpizzaapplikasjonen lar kunder bestille pålegg, for eksempel ost, pepperoni, løk eller forskjellige kombinasjoner. Derfor er en pizza som en kunde vil bestille ost.

offentligklasseCheesePizzaBuilderredskaperBygger{
privat Pizza pizza;

offentligCheesePizzaBuilder(){
dette.pizza = ny Pizza();
}

@Overstyring
offentligtomromlage PizzaDough(){
dette.pizza.setPizzaDough("Deig");
}

@Overstyring
offentligtomromlage Topping(){
dette.pizza.setTopping("Ost");
}

@Overstyring
offentlig Pizza getPizza(){
komme tilbakedette.pizza;
}
}

CheesePizzaBuilder-klassen implementerer Builder-grensesnittet og bruker det til å lage en ny ostepizza. Dette er en representasjon av Pizza-objektet. Det gjør den også på en måte som er uavhengig av Pizza-klassen.

CheesePizzaBuilder-klassen vet ikke mye om Pizza-klassen, den vet bare hva den trenger å vite for å fullføre funksjonen. Den vet at Pizza-klassen har en deig- og en topping-egenskap, og den setter disse egenskapene til to spesifikke verdier som hver ostepizza vil ha. Nå hver gang applikasjonen ringer til CheesePizzaBuilder-klassen, vil den lage en ny Pizza som har ostetopping.

Direktørklassen

Regissørklassen er et avgjørende aspekt av byggherremønsteret. Det eneste formålet med en betongbyggerklasse er å lage et spesifikt objekt. Den oppnår dette ved å lage de forskjellige delene av et objekt separat.

Byggebetongklassene er imidlertid uvitende om algoritmen. Ingen av byggmesterklassene vet å bygge deigen før de legger på toppingen. Dette er direktørklassens funksjon.

offentligklasseRegissør{
privat Builder pizzaBuilder;

offentligRegissør(Builder pizzaBuilder){
dette.pizzaBuilder = pizzaBuilder;
}

offentlig Pizza getPizza(){
komme tilbakedette.pizzaBuilder.getPizza();
}

offentligtomromlage pizza(){
dette.pizzaBuilder.createPizzaDough();
dette.pizzaBuilder.createTopping();
}
}

Director-klassen bruker byggegrensesnittet til å lage pizza. Det er keeperen av algoritmen.

Fordelene ved å bruke Builder-designmønsteret

Den største fordelen med å bruke byggmesterdesignmønsteret er dens innkapslingsegenskap. Dette er et avgjørende aspekt ved programvareutvikling, da det hjelper til med utviklingen av sikre applikasjoner.

En annen fordel med dette designmønsteret er dens objektkonstruksjonstilnærming. Den lar deg lage flertrinnsprosesser, der hvert trinn er uavhengig, noe som gjør feilsøking enklere.