Sobes.tech
Middle+

Factory Builder dizayn shabloni nima?

sobes.tech AI

AIdan javob

Kompleks ob'ektlarini yaratishda Factory Builder naqshidan, yoki aniqroq aytganda, Factory Method va Builder ning kombinatsiyasidan foydalaniladi. Bu ikki naqsh murakkab ob'ektlarni yaratishni yaxshilash uchun birlashtirilgan.

Factory Method interfeysini ob'ekt yaratish uchun belgilaydi, ammo qaysi sinfni instansiyalashni subklasslarga qoldiradi. U ob'ekt yaratish mas'uliyatini bolalar sinflarga o'tkazadi.

Builder murakkab ob'ektni uning taqdimotidan ajratadi, shunda bir xil qurilish jarayoni turli taqdimotlarni yaratishi mumkin. Bu ob'ektni bosqichma-bosqich qurishga imkon beradi va metod zanjiridan foydalanadi.

Ushbu naqshlarning kombinatsiyasi ko'pincha murakkab ob'ektning bir nechta variantlarini yaratish zarur bo'lganda uchraydi. Factory Method qaysi Builder turidan foydalanishni belgilaydi, va Builder bu turdagi ob'ektni turli konfiguratsiyalar bilan qanday yaratishni hal qiladi.

Misol uchun: Murakkab boshlang'ichni talab qiladigan ob'ektlar hierarxiyasiga ega bo'lsangiz va ularni turli konfiguratsiyalar bilan yaratmoqchi bo'lsangiz.

Tavsiya etilgan interaktsiya tuzilishi:

  • Fabrika: Kirish parametrlariga yoki o'z turiga asoslangan holda, ma'lum bir Builder instansiyasini qaytaradigan metodga ega.
  • Builder: Murakkab ob'ekt parametrlarini bosqichma-bosqich sozlash uchun metodlar va tayyor ob'ektni qaytaradigan build() yakuniy metodga ega.
  • Mahsulot: Builder tomonidan yaratilgan murakkab ob'ekt.

Afzalliklari:

  • Murakkab ob'ektlarni yaratishda kodning o'qilishi va boshqarilishi yaxshilanadi.
  • Bir xil turdagi ob'ekt uchun turli konfiguratsiyalarni yaratish uchun moslashuvchanlik.
  • Ob'ekt yaratish mantiqini uning taqdimotidan ajratish.
  • Yangi mahsulot turlarini (Factory Method yordamida) yoki yangi qurilish usullarini (Builder yordamida) qo'shishni osonlashtiradi.

Kamchiliklari:

  • Loyihada sinflar sonining ko'payishi.
  • Oddiy ob'ektlar uchun ortiqcha bo'lishi mumkin.

Misol (pseudo-kod):

// Mahsulot
class ComplexObject {
    private String partA;
    private int partB;

    // maxfiy konstruktor
    private ComplexObject(String partA, int partB) {
        this.partA = partA;
        this.partB = partB;
    }

    // Ichki Builder sinfi
    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, ma'lum bir Builderni qaytaradi
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);
    }
}

// Foydalanish:
// ComplexObject obj1 = ComplexObjectFactory.createDefaultBuilder().build();
// ComplexObject obj2 = ComplexObjectFactory.createSpecialBuilder().setPartA("customA").build();