Паттерни тарҳрезии Factory Builder чист?
sobes.tech AI
Ҷавоб аз AI
Шаблон Factory Builder, или по-скоро Factory Method в съчетание с Builder, е комбинация от два шаблона, която подобрява създаването на сложни обекти.
Factory Method определя интерфейс за създаване на обект, но позволява на подкласовете да решат кой клас да инстанцират. Делегира отговорността за създаването на обекта на подкласовете.
Builder отделя конструирането на сложен обект от неговото представяне, така че един и същи процес на конструиране може да създава различни представяния. Позволява стъпково създаване на обект чрез верижни извиквания на методи.
Комбинацията на тези шаблони най-често се среща в сценарии, където е необходимо да се създадат няколко варианта на сложен обект. Factory Method определя кой тип Builder трябва да бъде използван, а 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();