Mi az a Factory Builder tervezési minta?
sobes.tech MI
Válasz az MI-től
A Factory Builder minta, vagy inkább a Factory Method kombinációja a Builder-rel, két minta kombinációja, amely javítja összetett objektumok létrehozását.
A Factory Method meghatározza az interfészt az objektum létrehozására, de lehetővé teszi az alosztályok számára, hogy eldöntsék, melyik példányosítandó osztályt használják. A felelősséget az objektum létrehozásáért az alosztályokra delegálja.
A Builder elválasztja egy összetett objektum konstrukcióját annak megjelenítésétől, így ugyanaz a konstrukciós folyamat különböző megjelenítéseket hozhat létre. Lépésenkénti objektumépítést tesz lehetővé, metódushívások láncolásával.
Ezek kombinációja leggyakrabban olyan forgatókönyvekben fordul elő, ahol több változatban kell összetett objektumokat létrehozni. A Factory Method meghatározza, hogy milyen típusú Builder-t kell használni, míg a Builder az hogyan-t végzi el az adott típusú objektum különböző konfigurációkkal való létrehozásában.
Használati példa: Amikor egy objektumhierarchiád van, amely összetett inicializálást igényel, és különböző konfigurációkkal szeretnéd ezeket az objektumokat létrehozni.
Tipikus interakciós struktúra:
- Gyár: Egy metódust tartalmaz, amely egy adott Builder példányát adja vissza a bemeneti paraméterek vagy a típus szerint.
- Builder: Metódusokat tartalmaz az összetett objektum paramétereinek lépésenkénti beállítására és a végső
build()metódust, amely a kész objektumot adja vissza. - Termék: Az összetett objektum, amelyet a Builder hoz létre.
Előnyök:
- Javított olvashatóság és kezelhetőség a kód összetett objektumok létrehozásakor.
- Rugalmasság ugyanazon típusú objektum különböző konfigurációinak létrehozásában.
- Az objektum létrehozási logika elválasztása a megjelenítésétől.
- Az új típusú termékek (Factory Method használatával) vagy új építési módok (Builder használatával) könnyű hozzáadása.
Hátrányok:
- A osztályok számának növekedése a projektben.
- Lehet, hogy túlzás egyszerű objektumok esetén.
Példa (pszeudokód):
// Termék
class ComplexObject {
private String partA;
private int partB;
// privát konstruktor
private ComplexObject(String partA, int partB) {
this.partA = partA;
this.partB = partB;
}
// Builder belső osztály
public static class Builder {
private String partA;
private int partB;
public Builder setPartA(String partA) {
this.partA = partA;
return this;
}
public Builder setPartB(int partB) {
this.partB = partB;
return this;
}
public ComplexObject build() {
return new ComplexObject(partA, partB);
}
}
}
// Gyár, amely Builder-t ad vissza
class ComplexObjectFactory {
public static ComplexObject.Builder createDefaultBuilder() {
return new ComplexObject.Builder()
.setPartA("defaultA")
.setPartB(10);
}
public static ComplexObject.Builder createSpecialBuilder() {
return new ComplexObject.Builder()
.setPartA("specialA")
.setPartB(50);
}
}
// Használat:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();