Sobes.tech
Middle+

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

// Өнімді қайтарушы фабрика
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();