Middle
Kas ir dizaina paraugs 'Builder'?
sobes.tech AI
Atbilde no AI
Dizaina paraugs "Būvētājs" (Builder) ir izcelsmes paraugs, kas nodrošina veidu, kā pakāpeniski veidot sarežģītu objektu. Tas atdala sarežģīta objekta būvniecības procesu no tā attēlojuma, ļaujot izmantot to pašu būvniecības procesu dažādiem attēlojumiem.
Parauga galvenās sastāvdaļas:
- Builder: Abstrakta vai konkrēta saskarne (vai klase), kas definē metožu kopumu, lai pakāpeniski būvētu produkta daļas.
- ConcreteBuilder: Konkrēta Builder realizācija, kas izveido specifisku produkta attēlojumu. Viņš zina visas būvniecības detaļas.
- Director: Izvēles, bet bieži lietojama klase. Nosaka būvniecības soļu secību, lai izveidotu noteiktu produkta konfigurāciju.
- Product: Sarežģīts objekts, kas tiek būvēts. Tas sastāv no daudziem elementiem.
Priekšrocības:
- Ļauj pakāpeniski veidot sarežģītus objektus, izvairoties no "teleskopiskiem" konstruktoriem (ar daudz parametru).
- Iekapsulē sarežģīta objekta būvniecības loģiku.
- Atvieglo produkta iekšējā attēlojuma maiņu.
- Ļauj izmantot to pašu būvniecības procesu dažādu produkta variāciju izveidei.
Piemēri:
// Produkts
class Pizza {
private String dough = "";
private String sauce = "";
private List<String> toppings = new ArrayList<>();
public void setDough(String dough) {
this.dough = dough;
}
public void setSauce(String sauce) {
this.sauce = sauce;
}
public void addTopping(String topping) {
this.toppings.add(topping);
}
@Override
public String toString() {
return "Pizza with dough: " + dough + ", sauce: " + sauce + ", toppings: " + toppings;
}
}
// Dizaina saskarne
interface PizzaBuilder {
void buildDough();
void buildSauce();
void buildToppings();
Pizza getPizza();
}
// Konkrētais būvētājs
class MargheritaPizzaBuilder implements PizzaBuilder {
private Pizza pizza = new Pizza();
@Override
public void buildDough() {
pizza.setDough("plāna mīkla");
}
@Override
public void buildSauce() {
pizza.setSauce("tomātu");
}
@Override
public void buildToppings() {
pizza.addTopping("mozzarella");
pizza.addTopping("baziliks");
}
@Override
public Pizza getPizza() {
return this.pizza;
}
}
// Direktors (izvēles)
class Cook {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) {
pizzaBuilder = pb;
}
public Pizza getPizza() {
return pizzaBuilder.getPizza();
}
public void constructPizza() {
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildToppings();
}
}
// Piemērs
public class BuilderExample {
public static void main(String[] args) {
Cook cook = new Cook();
PizzaBuilder margheritaBuilder = new MargheritaPizzaBuilder();
cook.setPizzaBuilder(margheritaBuilder);
cook.constructPizza();
Pizza margherita = cook.getPizza();
System.out.println(margherita);
}
}
Kontekstā automatizētajā testēšanā, "Būvētājs" bieži tiek izmantots, lai izveidotu testu datus vai sarežģītus testu objektus (piemēram, lietotāja objektu ar daudziem atribūtiem, pasūtījuma objektu ar vairākām pozīcijām), kad ir nepieciešams elastīgi konfigurēt dažādas šo datu variācijas dažādiem testu scenārijiem.