Ի՞նչ է Factory Builder նախագծման ձևանմուշը։
sobes.tech AI
Պատասխան AI-ից
Factory Builder մոդելը, կամ ավելի ճիշտ Factory Method-ը Builder-ի հետ համատեղ, երկու մոդելների միացումն է, որը բարելավում է բարդ օբյեկտների ստեղծումը:
Factory Method-ը սահմանում է ինտերֆեյս օբյեկտի ստեղծման համար, բայց թույլ է տալիս ենթակլասներին որոշել, թե որ դասը պետք է ինստանցիացվի: Այն փոխանցում է պատասխանատվությունը օբյեկտի ստեղծման համար ենթակլասներին:
Builder-ը բաժանում է բարդ օբյեկտի կառուցումը նրա ներկայացումից, այնպես որ նույն կառուցման գործընթացը կարող է ստեղծել տարբեր ներկայացումներ: Այն թույլ է տալիս քայլ առ քայլ կառուցել օբյեկտը, օգտագործելով մեթոդների շղթա:
Այս երկու մոդելների համակցումը հաճախ հանդիպում է այն դեպքերում, երբ անհրաժեշտ է ստեղծել մի քանի տարբերակներ բարդ օբյեկտների:
Օգտագործման օրինակ: Երբ ունեք օբյեկտների ժառանգականություն, որոնք պահանջում են բարդ ինիցիալիզացիա, և ցանկանում եք ստեղծել այդ օբյեկտները տարբեր կոնֆիգուրացիաներով:
Համագործակցության հիմնական կառուցվածքը:
- Արտադրություն: Ունի մեթոդ, որը վերադարձնում է կոնկրետ Builder-ի օրինակ՝ ելնելով մուտքային պարամետրերից կամ իր տիպից:
- Builder: Ունի մեթոդներ բարդ օբյեկտի պարամետրերի քայլ առ քայլ կարգավորելու համար և վերջնական
build()մեթոդ, որը վերադարձնում է պատրաստ օբյեկտը: - Ապրանք: Բարդ օբյեկտը, որը ստեղծվում է Builder-ի միջոցով:
Առավելություններ:
- Կոդի ընթեռնելիության և կառավարման բարելավում բարդ օբյեկտների ստեղծման ժամանակ:
- Միևնույն տիպի օբյեկտների տարբեր կոնֆիգուրացիաների ստեղծման ճկունություն:
- Օբյեկտի ստեղծման տրամաբանության բաժանում նրա ներկայացումից:
- Նոր տեսակի արտադրանքների (օգտագործելով Factory Method) կամ նոր կառուցման մեթոդների (օգտագործելով Builder) հեշտ ավելացում:
Կողմնակալություններ:
- Կլասների քանակի ավելացում նախագծում:
- Կարող է լինել ավելորդ պարզ օբյեկտների համար:
Օրինակ (պսևդոկոդ):
// Ապրանք
class ComplexObject {
private String partA;
private int partB;
// մասնավոր կոնստրուկտոր
private ComplexObject(String partA, int partB) {
this.partA = partA;
this.partB = partB;
}
// 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);
}
}
}
// Արտադրություն, որը վերադարձնում է 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);
}
}
// Օգտագործում:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();