Подробнее на 👉 refactoring.guru
#include <iostream>
// Интерфейс для строительства автомобилей
class CarBuilder {
public:
virtual void buildEngine() = 0;
virtual void buildBody() = 0;
virtual void buildInterior() = 0;
};
// Конкретная реализация строителя автомобилей
class BasicCarBuilder : public CarBuilder {
public:
void buildEngine() {
std::cout << "Строим двигатель для автомобиля" << std::endl;
}
void buildBody() { std::cout << "Строим кузов для автомобиля" << std::endl; }
void buildInterior() {
std::cout << "Строим интерьер для автомобиля" << std::endl;
}
};
// Прокси для строителя автомобилей
class CarBuilderProxy : public CarBuilder {
private:
CarBuilder* carBuilder;
public:
CarBuilderProxy() { carBuilder = new BasicCarBuilder(); }
void buildEngine() {
std::cout << "Проверяем доступ" << std::endl;
carBuilder->buildEngine();
std::cout << "Завершаем проверку" << std::endl;
}
void buildBody() {
std::cout << "Проверяем доступ" << std::endl;
carBuilder->buildBody();
std::cout << "Завершаем проверку" << std::endl;
}
void buildInterior() {
std::cout << "Проверяем доступ" << std::endl;
carBuilder->buildInterior();
std::cout << "Завершаем проверку" << std::endl;
}
};
int main() {
CarBuilderProxy proxy;
proxy.buildEngine();
proxy.buildBody();
proxy.buildInterior();
return 0;
}
Будет напечатано:
Проверяем доступ Строим двигатель для автомобиля Завершаем проверку Проверяем доступ Строим кузов для автомобиля Завершаем проверку Проверяем доступ Строим интерьер для автомобиля Завершаем проверку
abstract class CarBuilder {
void buildEngine();
void buildBody();
void buildInterior();
}
class BasicCarBuilder implements CarBuilder {
void buildEngine() {
print('Строим двигатель для автомобиля');
}
void buildBody() {
print('Строим кузов для автомобиля');
}
void buildInterior() {
print('Строим интерьер для автомобиля');
}
}
class CarBuilderProxy implements CarBuilder {
late CarBuilder carBuilder;
CarBuilderProxy() {
carBuilder = BasicCarBuilder();
}
void buildEngine() {
print('Проверяем доступ');
carBuilder.buildEngine();
print('Завершаем проверку');
}
void buildBody() {
print('Проверяем доступ');
carBuilder.buildBody();
print('Завершаем проверку');
}
void buildInterior() {
print('Проверяем доступ');
carBuilder.buildInterior();
print('Завершаем проверку');
}
}
void main() {
CarBuilderProxy proxy = CarBuilderProxy();
proxy.buildEngine();
proxy.buildBody();
proxy.buildInterior();
}
Будет напечатано:
Проверяем доступ Строим двигатель для автомобиля Завершаем проверку Проверяем доступ Строим кузов для автомобиля Завершаем проверку Проверяем доступ Строим интерьер для автомобиля Завершаем проверку