Oblikovalski vzorec Builder povzema lastnosti predmeta in vam omogoča, da sestavite njegovo predstavitev. Ta vzorec vam omogoča sestavljanje kompleksnih objektov z različnimi lastnostmi, čeprav pripadajo istemu razredu.
Tipičen objektni razred vsebuje atribute, konstruktorje in metode. Vzorec graditelja vam omogoča, da logiko konstrukcije izvlečete iz razreda objektov in jo postavite v razrede, imenovane graditelji. Te graditeljske razrede lahko nato uporabite za ustvarjanje različnih različic istega predmeta.
Implementacija vzorca graditelja v Javi
Dober primer vzorca graditelja je sistem naročanja pice, ki strankam omogoča izbiro različnih možnosti preliva.
Razred izdelka
Eden od pristopov je, da graditelj naredite vmesnik, vendar boste morali najprej ustvariti razred izdelka. Izdelek v tej vzorčni aplikaciji je pica.
javnostirazredPizza{
// lastnosti
zasebnoint številka naročila;
zasebno Vrvica testo za pico;
zasebno Vrvica preliv;
// pridobivalci in nastavljalci
javnostiintgetOrderNumber(){
vrnitev številka naročila;
}
javnostiprazninasetOrderNumber(int številka naročila){
to.orderNumber = ordernumber;
}
javnosti Vrvica getPizzaDough(){
vrnitev testo za pico;
}
javnostiprazninasetPizzaDough(Testo za pico na vrvici){
to.pizzaDough = Testo za pico;
}
javnosti Vrvica getTopping(){
vrnitev preliv;
}
javnostiprazninasetTopping(String topping){
to.topping = preliv;
}
}
Graditeljski razred
Pizza Java razred ima tri lastnosti in njihove ustrezne pridobivalnike in nastavljalce, vendar jih ni metode konstruktorja. Vmesnik graditelja vam bo omogočil, da ustvarite vsak vidik predmeta pice posebej. Nato vam bo omogočilo, da pridobite celoten predmet pice.
javnostivmesnikGradbenik{
javnostiprazninacreatePizzaDough();
javnostiprazninacreateTopping();
javnosti Pizza getPizza();
}
Aplikacija za vzorčno pico omogoča strankam, da naročijo poljubne dodatke, kot so sir, feferoni, čebula ali različne kombinacije. Zato je ena pica, ki jo bo stranka naročila, sir.
javnostirazredCheesePizzaBuilderpripomočkeGradbenik{
zasebno Pizza pizza;
javnostiCheesePizzaBuilder(){
to.pizza = novo pica ();
}
@Preglasi
javnostiprazninacreatePizzaDough(){
to.pizza.setPizzaDough("Testo");
}
@Preglasi
javnostiprazninacreateTopping(){
to.pizza.setTopping("Sir");
}
@Preglasi
javnosti Pizza getPizza(){
vrnitevto.pizza;
}
}
Razred CheesePizzaBuilder implementira vmesnik Builder in ga uporablja za ustvarjanje nove pice s sirom. To je ena predstavitev objekta Pizza. To počne tudi na način, ki je neodvisen od razreda Pizza.
Razred CheesePizzaBuilder ne ve veliko o razredu Pizza, ve le tisto, kar mora vedeti, da dokonča svojo funkcijo. Ve, da ima razred Pizza lastnost testa in preliva, in te lastnosti nastavi na dve specifični vrednosti, ki ju bo imela vsaka pica s sirom. Zdaj vsakič, ko aplikacija pokliče razred CheesePizzaBuilder, bo ustvarila novo pico s sirnim prelivom.
Direktorski razred
Razred režiserja je ključni vidik vzorca graditelja. Edini namen razreda betonskega graditelja je ustvariti določen objekt. To doseže z ustvarjanjem različnih delov predmeta ločeno.
Vendar gradbeni betonski razredi ne poznajo algoritma. Nobeden od gradbenih razredov ne ve, kako sestaviti testo, preden dodamo preliv. To je funkcija direktorskega razreda.
javnostirazredDirektor{
zasebno Graditelj pizzaBuilder;
javnostiDirektor(Builder pizzaBuilder){
to.pizzaBuilder = pizzaBuilder;
}
javnosti Pizza getPizza(){
vrnitevto.pizzaBuilder.getPizza();
}
javnostiprazninanarediPizzo(){
to.pizzaBuilder.createPizzaDough();
to.pizzaBuilder.createTopping();
}
}
Razred Director uporablja vmesnik graditelja za izdelavo pic. Je varuh algoritma.
Prednosti uporabe oblikovalskega vzorca Builder
Glavna prednost uporabe oblikovalskega vzorca graditelja je njegova lastnost enkapsulacije. To je ključni vidik programskega inženiringa, saj pomaga pri razvoju varnih aplikacij.
Druga prednost tega oblikovalskega vzorca je njegov pristop k konstrukciji objektov. Omogoča ustvarjanje večstopenjskih procesov, kjer je vsak korak neodvisen, kar olajša odpravljanje napak.