Modelul de design Builder încapsulează proprietățile unui obiect și vă permite să construiți o reprezentare a acestuia. Acest model vă permite să construiți obiecte complexe, cu proprietăți diferite, chiar dacă aparțin aceleiași clase.
O clasă de obiecte tipică conține atribute, constructori și metode. Modelul constructor vă permite să extrageți logica construcției din clasa de obiecte și să o plasați în clase numite constructori. Puteți utiliza apoi aceste clase de constructor pentru a crea diferite variații ale aceluiași obiect.
Implementarea modelului Builder în Java
Un bun exemplu de model de constructor este un sistem de comandă de pizza care permite clienților să aleagă diferite opțiuni de topping.
Clasa de produse
O abordare este de a face din constructor o interfață, dar mai întâi va trebui să creați o clasă de produse. Produsul din acest exemplu de aplicație este o pizza.
publicclasăPizza{
// proprietăți
privatint număr de ordine;
privat Şir aluat de pizza;
privat Şir topping;
// getters și setters
publicintgetOrderNumber(){
întoarcere număr de ordine;
}
publicgolsetOrderNumber(int număr de ordine){
acest.orderNumber = orderNumber;
}
public Şir getPizzaDough(){
întoarcere aluat de pizza;
}
publicgolsetPizzaAluat(Aluat de pizza cu sfoară){
acest.pizzaDough = pizzaDough;
}
public Şir getTopping(){
întoarcere topping;
}
publicgolsetTopping(Topping cu coarde){
acest.topping = topping;
}
}
Clasa constructorului
Pizza Clasa Java are trei proprietăți și getters și setters respectivi, dar nu există metode constructoare. Interfața de constructor vă va permite să creați separat fiecare aspect al obiectului pizza. Vă va permite apoi să recuperați întregul obiect pizza.
publicinterfațăConstructor{
publicgolcreațiPizzaDough();
publicgolcreateTopping();
public Pizza getPizza();
}
Aplicația eșantion de pizza permite clienților să comande orice topping, cum ar fi brânză, pepperoni, ceapă sau diferite combinații. Prin urmare, o pizza pe care un client o va comanda este brânza.
publicclasăCheesePizzaBuilderunelteConstructor{
privat Pizza pizza;
publicCheesePizzaBuilder(){
acest.pizza = nou Pizza();
}
@Trece peste
publicgolcreațiPizzaDough(){
acest.pizza.setPizzaDough("Aluat");
}
@Trece peste
publicgolcreateTopping(){
acest.pizza.setTopping("Brânză");
}
@Trece peste
public Pizza getPizza(){
întoarcereacest.pizza;
}
}
Clasa CheesePizzaBuilder implementează interfața Builder și o folosește pentru a crea o nouă pizza cu brânză. Aceasta este o reprezentare a obiectului Pizza. De asemenea, face acest lucru într-un mod care este independent de clasa Pizza.
Clasa CheesePizzaBuilder nu știe prea multe despre clasa Pizza, știe doar ce trebuie să știe pentru a-și îndeplini funcția. Știe că clasa Pizza are un aluat și o proprietate de topping și setează aceste proprietăți la două valori specifice pe care le va avea fiecare pizza cu brânză. Acum, de fiecare dată când aplicația apelează la clasa CheesePizzaBuilder, va crea o pizza nouă care are topping de brânză.
Clasa Director
Clasa de director este un aspect crucial al modelului de constructor. Singurul scop al unei clase de constructor de beton este de a crea un obiect specific. Se realizează acest lucru prin crearea separată a diferitelor părți ale unui obiect.
Cu toate acestea, clasele de beton de constructor nu cunosc algoritmul. Niciuna dintre clasele de constructori nu știe să construiască aluatul înainte de a adăuga topping-ul. Aceasta este funcția clasei de director.
publicclasăDirector{
privat Builder pizzaBuilder;
publicDirector(Constructor pizzaBuilder){
acest.pizzaBuilder = pizzaBuilder;
}
public Pizza getPizza(){
întoarcereacest.pizzaBuilder.getPizza();
}
publicgolfacePizza(){
acest.pizzaBuilder.createPizzaDough();
acest.pizzaBuilder.createTopping();
}
}
Clasa Director folosește interfața de constructor pentru a face pizza. Este deținătorul algoritmului.
Avantajele utilizării modelului de design Builder
Avantajul major al utilizării modelului de proiectare a constructorului este proprietatea sa de încapsulare. Acesta este un aspect crucial al ingineriei software, deoarece ajută la dezvoltarea aplicațiilor securizate.
Un alt avantaj al acestui model de design este abordarea construcției obiectelor. Vă permite să creați procese în mai mulți pași, în care fiecare pas este independent, ceea ce face depanarea mai ușoară.