Подробнее на 👉 refactoring.guru
#include <iostream>
// Абстрактный адаптер
class CarBuilderAdapter {
public:
virtual void buildEngine() = 0;
virtual void buildBody() = 0;
virtual void buildInterior() = 0;
};
// Конкретная реализация адаптера для седанов
class SedanCarBuilderAdapter : public CarBuilderAdapter {
public:
void buildEngine() override {
std::cout << "Строим двигатель для седана" << std::endl;
}
void buildBody() override {
std::cout << "Строим кузов для седана" << std::endl;
}
void buildInterior() override {
std::cout << "Строим интерьер для седана" << std::endl;
}
};
// Конкретная реализация адаптера для спортивных автомобилей
class SportCarBuilderAdapter : public CarBuilderAdapter {
public:
void buildEngine() override {
std::cout << "Строим двигатель для спортивного автомобиля" << std::endl;
}
void buildBody() override {
std::cout << "Строим кузов для спортивного автомобиля" << std::endl;
}
void buildInterior() override {
std::cout << "Строим интерьер для спортивного автомобиля" << std::endl;
}
};
int main() {
CarBuilderAdapter* sedanCarAdapter = new SedanCarBuilderAdapter();
sedanCarAdapter->buildEngine();
sedanCarAdapter->buildBody();
sedanCarAdapter->buildInterior();
CarBuilderAdapter* sportCarAdapter = new SportCarBuilderAdapter();
sportCarAdapter->buildEngine();
sportCarAdapter->buildBody();
sportCarAdapter->buildInterior();
delete sedanCarAdapter;
delete sportCarAdapter;
return 0;
}
Будет напечатано:
Строим двигатель для седана Строим кузов для седана Строим интерьер для седана Строим двигатель для спортивного автомобиля Строим кузов для спортивного автомобиля Строим интерьер для спортивного автомобиля
// Абстрактный адаптер
abstract class CarBuilderAdapter {
void buildEngine();
void buildBody();
void buildInterior();
}
// Конкретная реализация адаптера для седанов
class SedanCarBuilderAdapter implements CarBuilderAdapter {
void buildEngine() {
print('Строим двигатель для седана');
}
void buildBody() {
print('Строим кузов для седана');
}
void buildInterior() {
print('Строим интерьер для седана');
}
}
// Конкретная реализация адаптера для спортивных автомобилей
class SportCarBuilderAdapter implements CarBuilderAdapter {
void buildEngine() {
print('Строим двигатель для спортивного автомобиля');
}
void buildBody() {
print('Строим кузов для спортивного автомобиля');
}
void buildInterior() {
print('Строим интерьер для спортивного автомобиля');
}
}
void main() {
CarBuilderAdapter sedanCarAdapter = SedanCarBuilderAdapter();
sedanCarAdapter.buildEngine();
sedanCarAdapter.buildBody();
sedanCarAdapter.buildInterior();
CarBuilderAdapter sportCarAdapter = SportCarBuilderAdapter();
sportCarAdapter.buildEngine();
sportCarAdapter.buildBody();
sportCarAdapter.buildInterior();
}
Будет напечатано:
Строим двигатель для седана Строим кузов для седана Строим интерьер для седана Строим двигатель для спортивного автомобиля Строим кузов для спортивного автомобиля Строим интерьер для спортивного автомобиля