Dizajnerski uzorak Builder sažima svojstva objekta i omogućuje vam da konstruirate njegov prikaz. Ovaj obrazac vam omogućuje da konstruirate složene objekte, s različitim svojstvima iako pripadaju istoj klasi.
Tipična klasa objekta sadrži atribute, konstruktore i metode. Uzorak graditelja omogućuje vam izdvajanje konstrukcijske logike iz klase objekta i postavljanje u klase koje se nazivaju graditelji. Zatim možete koristiti ove klase graditelja za stvaranje različitih varijacija istog objekta.
Implementacija Builder uzorka u Javi
Dobar primjer uzorka graditelja je sustav naručivanja pizze koji kupcima omogućuje odabir različitih opcija preljeva.
Klasa proizvoda
Jedan pristup je napraviti graditelja kao sučelje, ali prvo ćete morati stvoriti klasu proizvoda. Proizvod u ovoj oglednoj prijavi je pizza.
javnostrazredaPizza{
// Svojstva
privatnaint broj narudžbe;
privatna
Niz tijesto za pizzu;
privatna Niz preljev;
// primatelji i postavljači
javnostintgetOrderNumber(){
povratak broj narudžbe;
}
javnostponištitisetOrderNumber(int broj narudžbe){
ovaj.Broj narudžbe = Broj narudžbe;
}
javnost Niz getPizzaDough(){
povratak tijesto za pizzu;
}
javnostponištitisetPizzaDough(Nizano tijesto za pizzu){
ovaj.pizzaDough = Tijesto za pizzu;
}
javnost Niz getTopping(){
povratak preljev;
}
javnostponištitisetTopping(String topping){
ovaj.preljev = preljev;
}
}
Klasa graditelja
Pizza Java klasa ima tri svojstva i njihove dobavljače i postavljače, ali ne postoje metode konstruktora. Sučelje graditelja omogućit će vam da svaki aspekt objekta pizza stvorite zasebno. Tada će vam omogućiti da dohvatite cijeli objekt pizze.
javnostsučeljeGraditelj{
javnostponištiticreatePizzaDough();
javnostponištiticreateTopping();
javnost Pizza getPizza();
}
Aplikacija za uzorke pizze omogućuje kupcima da naruče bilo koji dodatak, poput sira, feferona, luka ili različitih kombinacija. Dakle, jedna pizza koju će kupac naručiti je sir.
javnostrazredaCheesePizzaBuilderoruđaGraditelj{
privatna Pizza pizza;
javnostCheesePizzaBuilder(){
ovaj.pizza = novi Pizza();
}
@Nadjačaj
javnostponištiticreatePizzaDough(){
ovaj.pizza.setPizzaDough("Tijesto");
}
@Nadjačaj
javnostponištiticreateTopping(){
ovaj.pizza.setTopping("Sir");
}
@Nadjačaj
javnost Pizza getPizza(){
povratakovaj.pizza;
}
}
Klasa CheesePizzaBuilder implementira sučelje Builder i koristi ga za stvaranje nove pizze sa sirom. Ovo je jedan prikaz objekta Pizza. Također to radi na način koji je neovisan o klasi Pizza.
Klasa CheesePizzaBuilder ne zna mnogo o klasi Pizza, ona zna samo ono što treba znati da dovrši svoju funkciju. Zna da klasa Pizza ima svojstvo tijesta i preljeva i postavlja ta svojstva na dvije specifične vrijednosti koje će imati svaka pizza sa sirom. Svaki put kada aplikacija pozove klasu CheesePizzaBuilder, sada će stvoriti novu pizzu koja ima nadjev od sira.
Redateljska klasa
Klasa redatelja ključni je aspekt obrasca graditelja. Jedina svrha klase betonskog graditelja je stvoriti određeni objekt. To postiže odvojenom izradom različitih dijelova objekta.
Međutim, klase graditelja betona nisu svjesne algoritma. Nitko od klasa graditelja ne zna ugraditi tijesto prije dodavanja preljeva. To je funkcija redateljske klase.
javnostrazredaDirektor{
privatna Graditelj pizzaBuilder;
javnostDirektor(Graditelj pizzaBuilder){
ovaj.pizzaBuilder = Graditelj pizze;
}
javnost Pizza getPizza(){
povratakovaj.pizzaBuilder.getPizza();
}
javnostponištitinapravitiPizzu(){
ovaj.pizzaBuilder.createPizzaDough();
ovaj.pizzaBuilder.createTopping();
}
}
Klasa Director koristi sučelje graditelja za izradu pizza. To je čuvar algoritma.
Prednosti korištenja uzorka dizajna Builder
Glavna prednost korištenja uzorka dizajna graditelja je njegovo svojstvo enkapsulacije. Ovo je ključni aspekt softverskog inženjeringa jer pomaže u razvoju sigurnih aplikacija.
Još jedna prednost ovog uzorka dizajna je pristup konstrukciji objekta. Omogućuje vam stvaranje procesa u više koraka, gdje je svaki korak neovisan, što olakšava otklanjanje pogrešaka.