Sobes.tech
Middle+

Ի՞նչ է Factory Builder նախագծման ձևանմուշը։

sobes.tech AI

Պատասխան AI-ից

Factory Builder մոդելը, կամ ավելի ճիշտ Factory MethodBuilder-ի հետ համատեղ, երկու մոդելների միացումն է, որը բարելավում է բարդ օբյեկտների ստեղծումը:

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();