Kas yra Factory Builder projektavimo modelis?
sobes.tech AI
Atsakymas iš AI
Factory Builder šablonas, arba tiksliau Factory Method kartu su Builder, yra dviejų šablonų derinys, kuris pagerina sudėtingų objektų kūrimą.
Factory Method apibrėžia sąsają objektui kurti, bet leidžia pogrupių klasėms nuspręsti, kurią klasę instancijuoti. Jis perduoda atsakomybę už objekto kūrimą pogrupių klasėms.
Builder atskiria sudėtingo objekto konstravimą nuo jo pateikimo, todėl tas pats konstravimo procesas gali kurti skirtingus pateikimus. Jis leidžia žingsnis po žingsnio kurti objektą, naudojant metodų grandinę.
Šių dviejų šablonų derinys dažnai pasitaiko scenarijuose, kai reikia sukurti kelias sudėtingo objekto versijas.
Naudojimo pavyzdys: Kai turite objektų hierarchiją, kuri reikalauja sudėtingos inicializacijos, ir norite kurti šiuos objektus su skirtingomis konfigūracijomis.
Tipinė sąveikos struktūra:
- Gamyklos: Turi metodą, kuris grąžina konkretų Builder pavyzdį, priklausomai nuo įvesties parametrų ar tipo.
- Builder: Turi metodus žingsnis po žingsnio nustatyti sudėtingo objekto parametrus ir galutinį
build()metodą, kuris grąžina paruoštą objektą. - Produktas: Sudėtingas objektas, kuris kuriamas Builder.
Privalumai:
- Pagerina kodo skaitomumą ir valdymą sudėtingų objektų kūrimo metu.
- Lankstumas kurti skirtingas to paties tipo objektų konfigūracijas.
- Objektų kūrimo logikos atskyrimas nuo jų pateikimo.
- Lengva pridėti naujų produktų tipų (naudojant Factory Method) arba naujų konstravimo būdų (naudojant Builder).
Trūkumai:
- Klasės padidėja projekte.
- Gali būti perteklinis paprastiems objektams.
Pavyzdys (pseudokodas):
// Produktas
class ComplexObject {
private String partA;
private int partB;
// privatus konstruktorius
private ComplexObject(String partA, int partB) {
this.partA = partA;
this.partB = partB;
}
// Builder vidinė klasė
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);
}
}
}
// Gamyklos, kuri grąžina Builder
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);
}
}
// Naudojimas:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();