Kas ir Factory Builder projektēšanas paraugs?
sobes.tech AI
Atbilde no AI
Factory Builder mode, vai drīzāk Factory Method kombinācijā ar Builder, ir divu modeļu kombinācija, kas uzlabo sarežģītu objektu izveidi.
Factory Method nosaka interfeisu objekta izveidei, bet ļauj apakšklasēm izlemt, kuru klasi instancēt. Tas deleģē atbildību par objekta izveidi bērnu klasēm.
Builder atdala sarežģīta objekta būvniecību no tā attēlojuma, tādējādi vienā un tajā pašā būvniecības procesā var radīt dažādus attēlojumus. Tas ļauj pakāpeniski veidot objektu, izmantojot metožu ķēdi.
Šo modeļu kombinācija visbiežāk sastopama scenārijos, kur nepieciešams izveidot vairākus sarežģīta objekta variantus. Factory Method nosaka, kāda tipa Builder jāizmanto, bet Builder pēc tam nodarbojas ar kā izveidot šī tipa objektu ar dažādām konfigurācijām.
Piemērs izmantošanai: Kad jums ir objektu hierarhija, kas prasa sarežģītu inicializāciju, un vēlaties izveidot šos objektus ar dažādām konfigurācijām.
Tipiska mijiedarbības struktūra:
- Fabrika: Tam ir metode, kas atgriež konkrēta Builder instanci atkarībā no ievades parametriem vai sava veida.
- Builder: Tam ir metodes sarežģīta objekta parametru pakāpeniskai iestatīšanai un galvenā metode
build(), kas atgriež gatavo objektu. - Produkts: Sarežģīts objekts, kas tiek izveidots ar Builder.
Priekšrocības:
- Uzlabota lasāmība un pārvaldāmība, veidojot sarežģītus objektus.
- Elastība dažādu konfigurāciju izveidē vienam un tam pašam objekta tipam.
- Objektu izveides loģikas atdalīšana no tā attēlojuma.
- Vienkāršota jaunu produktu tipu (izmantojot Factory Method) vai jaunu būvniecības veidu (izmantojot Builder) pievienošana.
Trūkumi:
- Palielināts klasu skaits projektā.
- Var būt pārāk sarežģīti vienkāršiem objektiem.
Piemērs (pseudo-kods):
// Produkts
class ComplexObject {
private String partA;
private int partB;
// privāts konstruktors
private ComplexObject(String partA, int partB) {
this.partA = partA;
this.partB = partB;
}
// iekšējā klase 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, kas atgriež 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);
}
}
// Lietošana:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();