Middle
Mi az a 'Builder' (Építő) tervezési minta?
sobes.tech MI
Válasz az MI-től
A "Builder" mintázat egy létrehozó tervezési minta, amely lehetővé teszi összetett objektumok lépésről lépésre történő létrehozását, különböző konfigurációs lehetőségeket kínálva.
- Cél: Szétválasztani az objektum építési folyamatát a megjelenítésétől. Lehetővé teszi ugyanazon építési folyamat különböző megjelenítéseinek elérését.
- Előnyök:
- Lehetővé teszi az objektum lépésenkénti építését, miközben elrejti az építési részleteket.
- Könnyíti a sok opcionális paraméterrel rendelkező objektumok létrehozását (ellentétben a sok argumentummal rendelkező konstruktorokkal vagy a Telescoping Constructors anti-mintával).
- Ugyanazt az építési kódot használhatja különböző objektum megjelenítések létrehozására.
- Fő résztvevők:
- Builder (Építő): Interfész vagy absztrakt osztály, amely meghatározza az objektum részeinek építési lépéseit.
- ConcreteBuilder (Konkrét Építő): A Builder interfész megvalósítása, amely létrehozza az objektum konkrét részeit, és biztosítja a végső eredmény elérésének módszerét.
- Director (Igazgató): Meghatározza az objektum létrehozásának lépéseinek sorrendjét, a Builder objektumot használva. Az igazgató opcionális, és az ügyfél közvetlenül is dolgozhat az Építővel.
- Product (Termék): Az épített objektum.
Struktúra példa (Java):
// Termék
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 + "]";
}
}
// Builder interfész
interface CarBuilder {
void buildEngine();
void buildWheels();
void buildColor();
Car getResult();
}
// Konkrét Builder
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;
}
}
// Igazgató (Opcionális)
class CarDirector {
private CarBuilder builder;
public CarDirector(CarBuilder builder) {
this.builder = builder;
}
public void constructCar() {
builder.buildEngine();
builder.buildWheels();
builder.buildColor();
}
}
// Ügyfél használata
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("Épített autó: " + sportsCar);
// Közvetlen használat Igazgató nélkül
CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
anotherSportsCarBuilder.buildEngine();
anotherSportsCarBuilder.buildColor(); // Készítés nélküli kerék
Car partialCar = anotherSportsCarBuilder.getResult();
System.out.println("Épített részleges autó: " + partialCar);
}
}