Middle
Kas ir dizaina paraugs 'Būvētājs' (Builder)?
sobes.tech AI
Atbilde no AI
„Būvētāja“ (Builder) paraugs ir radīšanas dizaina paraugs, kas ļauj pakāpeniski veidot sarežģītus objektus, piedāvājot dažādas konfigurācijas iespējas.
- Mērķis: atdalīt objekta būvniecības procesu no tā attēlojuma. ļauj iegūt dažādus vienas un tās pašas būvniecības procesa attēlojumus.
- Priekšrocības:
- ļauj pakāpeniski būvēt objektu, slēpjot būvniecības detaļas.
- atvieglo objektu izveidi ar daudzām izvēles parametru opcijām (atšķirībā no konstruktoru ar daudz argumentiem vai antipattern Telescoping Constructors).
- var izmantot vienu un to pašu būvniecības kodu, lai izveidotu dažādus objekta attēlojumus.
- Galvenie dalībnieki:
- Būvētājs (Builder): saskarne vai abstrakta klase, kas definē objekta daļu būvniecības soļus.
- Konkrētais būvētājs (ConcreteBuilder): Builder saskarnes realizācija, kas izveido konkrētas objekta daļas un nodrošina galīgā rezultāta iegūšanu.
- Direktors (Director): nosaka soļu secību objekta izveidei, izmantojot Builder objektu. Direktors nav obligāts, un klients var strādāt tieši ar Būvētāju.
- Produkts (Product): attēlotais objekts, kas tiek būvēts.
Struktūras piemērs (Java):
// Produkts
class Car {
private String engine;
private int wheels;
private String color;
public void setEngine(String engine) {
this.engine = engine;
}
public void setWheels(int wheels) {
this.wheels = wheels;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car [engine=" + engine + ", wheels=" + wheels + ", color=" + color + "]";
}
}
// Būvētāja saskarne
interface CarBuilder {
void buildEngine();
void buildWheels();
void buildColor();
Car getResult();
}
// Konkrētais būvētājs
class SportsCarBuilder implements CarBuilder {
private Car car = new Car();
@Override
public void buildEngine() {
car.setEngine("V8");
}
@Override
public void buildWheels() {
car.setWheels(4);
}
@Override
public void buildColor() {
car.setColor("Red");
}
@Override
public Car getResult() {
return car;
}
}
// Direktors (neobligāts)
class CarDirector {
private CarBuilder builder;
public CarDirector(CarBuilder builder) {
this.builder = builder;
}
public void constructCar() {
builder.buildEngine();
builder.buildWheels();
builder.buildColor();
}
}
// Klienta izmantošana
public class Client {
public static void main(String[] args) {
CarBuilder sportsCarBuilder = new SportsCarBuilder();
CarDirector director = new CarDirector(sportsCarBuilder);
director.constructCar();
Car sportsCar = sportsCarBuilder.getResult();
System.out.println("Būvēts auto: " + sportsCar);
// Tieša izmantošana bez direktora
CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
anotherSportsCarBuilder.buildEngine();
anotherSportsCarBuilder.buildColor(); // Bez ratiem
Car partialCar = anotherSportsCarBuilder.getResult();
System.out.println("Būvēts daļējs auto: " + partialCar);
}
}