Подробнее на 👉 refactoring.guru
#include <iostream>
#include <string>
#include <vector>
// Интерфейс для строительства автомобилей
class CarBuilder {
public:
virtual void build() = 0;
};
// Конкретная реализация строителя автомобилей
class BasicCarBuilder : public CarBuilder {
public:
void build() {
std::cout << "Строим базовую модель автомобиля" << std::endl;
}
};
// Компоновщик для объединения нескольких строителей
class CarBuilderComposite : public CarBuilder {
private:
std::vector<CarBuilder*> builders;
public:
void addBuilder(CarBuilder* builder) {
builders.push_back(builder);
}
void build() {
for (auto builder : builders) {
builder->build();
}
}
};
int main() {
BasicCarBuilder sedanBuilder;
BasicCarBuilder suvBuilder;
BasicCarBuilder sportsCarBuilder;
CarBuilderComposite carProductionLine;
carProductionLine.addBuilder(&sedanBuilder);
carProductionLine.addBuilder(&suvBuilder);
carProductionLine.addBuilder(&sportsCarBuilder);
carProductionLine.build();
return 0;
}
Будет напечатано:
Строим базовую модель автомобиля Строим базовую модель автомобиля Строим базовую модель автомобиля
abstract class CarBuilder {
void build();
}
class BasicCarBuilder implements CarBuilder {
void build() {
print('Строим базовую модель автомобиля');
}
}
class CarBuilderComposite implements CarBuilder {
List<CarBuilder> builders = [];
void addBuilder(CarBuilder builder) {
builders.add(builder);
}
void build() {
for (var builder in builders) {
builder.build();
}
}
}
void main() {
BasicCarBuilder sedanBuilder = BasicCarBuilder();
BasicCarBuilder suvBuilder = BasicCarBuilder();
BasicCarBuilder sportsCarBuilder = BasicCarBuilder();
CarBuilderComposite carProductionLine = CarBuilderComposite();
carProductionLine.addBuilder(sedanBuilder);
carProductionLine.addBuilder(suvBuilder);
carProductionLine.addBuilder(sportsCarBuilder);
carProductionLine.build();
}
Будет напечатано:
Строим базовую модель автомобиля Строим базовую модель автомобиля Строим базовую модель автомобиля