Подробнее на 👉 refactoring.guru
#include <iostream>
#include <map>
// Интерфейс для приспособленца
class CarFlyweight {
public:
virtual void build(int uniqueId) = 0;
};
// Конкретная реализация приспособленца
class Car : public CarFlyweight {
private:
std::string model;
public:
Car(const std::string& carModel) : model(carModel) {}
void build(int uniqueId) override {
std::cout << "Строим автомобиль " << model
<< " с уникальным идентификатором " << uniqueId << std::endl;
}
};
// Фабрика приспособленцев
class CarFactory {
private:
std::map<std::string, CarFlyweight*> cars;
public:
CarFlyweight* getCar(const std::string& model) {
if (cars.find(model) == cars.end()) {
cars[model] = new Car(model);
}
return cars[model];
}
};
int main() {
CarFactory factory;
CarFlyweight* car1 = factory.getCar("Sedan");
CarFlyweight* car2 = factory.getCar("SportCar");
car1->build(1);
car2->build(2);
return 0;
}
Будет напечатано:
Строим автомобиль Sedan с уникальным идентификатором 1 Строим автомобиль SportCar с уникальным идентификатором 2
// Интерфейс для приспособленца
abstract class CarFlyweight {
void build(int uniqueId);
}
// Конкретная реализация приспособленца
class Car implements CarFlyweight {
String model;
Car(this.model);
void build(int uniqueId) {
print('Строим автомобиль $model с уникальным идентификатором $uniqueId');
}
}
// Фабрика приспособленцев
class CarFactory {
Map<String, CarFlyweight> cars = {};
CarFlyweight getCar(String model) {
if (!cars.containsKey(model)) {
cars[model] = Car(model);
}
return cars[model]!;
}
}
void main() {
CarFactory factory = CarFactory();
CarFlyweight car1 = factory.getCar('Sedan');
CarFlyweight car2 = factory.getCar('SportCar');
car1.build(1);
car2.build(2);
}
Будет напечатано:
Строим автомобиль Sedan с уникальным идентификатором 1 Строим автомобиль SportCar с уникальным идентификатором 2