Mis on Factory Builder disainimuster?
sobes.tech AI
Vastus AI-lt
Factory Builder muster, või pigem Factory Method koos Builder, on kahe musterite kombinatsioon, mis parandab keeruliste objektide loomist.
Factory Method määratleb liidese objekti loomiseks, kuid võimaldab alamsüsteemidel otsustada, millist klassi instantsida. See delegeerib vastutuse objekti loomise lastele.
Builder eraldab keeruka objekti konstrueerimise selle esitusest, nii et sama konstrueerimisprotsess võib luua erinevaid esitlusi. See võimaldab samm-sammult objekti luua, kasutades meetodite ahelat.
Nende musterite kombinatsioon esineb kõige sagedamini stsenaariumides, kus on vaja luua mitu keerulise objekti varianti. Factory Method määrab, millist Builder tüüpi tuleks kasutada, ja Builder tegeleb kuidas selle tüübi objekti erinevate konfiguratsioonidega luua.
Näide kasutusest: Kui teil on objektide hierarhia, mis nõuab keerulist initsialiseerimist, ja soovite neid objekte luua erinevate konfiguratsioonidega.
Tüüpiline suhtlusring:
- Faktoria: Omab meetodit, mis tagastab konkreetse Builderi eksemplari sõltuvalt sisendparameetritest või oma tüübist.
- Builder: Omab meetodeid keeruka objekti parameetrite samm-sammuliseks seadistamiseks ja lõplikku meetodit
build(), mis tagastab valmis objekti. - Toode: Keeruline objekt, mis luuakse Builderi abil.
Eelised:
- Parandab koodi loetavust ja hallatavust keeruliste objektide loomisel.
- Paindlikkus erinevate konfiguratsioonide loomisel sama objekti tüübi jaoks.
- Objekti loomise loogika eraldamine selle esitusest.
- Uute toodetüüpide (kasutades Factory Method) või uute ehitusviiside (kasutades Builder) lisamise lihtsustamine.
Puudused:
- Klasside arvu suurenemine projektis.
- Võib olla üleliigne lihtsate objektide puhul.
Näide (pseudo-kood):
// Toode
class ComplexObject {
private String partA;
private int partB;
// privaatne konstruktor
private ComplexObject(String partA, int partB) {
this.partA = partA;
this.partB = partB;
}
// Siseklass Builder
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);
}
}
}
// Fabrika, mis tagastab Builderi
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);
}
}
// Kasutamine:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();