Адаптер (Adapter) :: Cетевой уголок Majestio

Адаптер (Adapter)


Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.

Применимость

Подробнее на 👉 refactoring.guru

UML-диаграмма

Пример реализации

#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();
}
Будет напечатано:
Строим двигатель для седана
Строим кузов для седана
Строим интерьер для седана
Строим двигатель для спортивного автомобиля
Строим кузов для спортивного автомобиля
Строим интерьер для спортивного автомобиля
Рейтинг: 0/5 - 0 голосов