design_patterns/03_abstract_factory.cpp
Yuki 29102983de
feat: Abstract Factory
Implemented a demo for the Abstract Factory.
2025-04-05 17:33:21 +08:00

63 lines
1.1 KiB
C++

#include <iostream>
#include <memory>
using namespace std;
class Table {
public:
virtual void show() = 0;
};
class ATable : public Table {
public:
virtual void show() {
cout << "Atable" << endl;
}
};
class Chair {
public:
virtual void show() = 0;
};
class AChair : public Chair {
public:
virtual void show() {
cout << "Achair" << endl;
}
};
class FurnitureFactory {
public:
virtual unique_ptr<Chair> build_chair() = 0;
virtual unique_ptr<Table> build_table() = 0;
};
// A concrete Factury will create the same style of objects.
class AFurnitureFactory : public FurnitureFactory {
public:
virtual unique_ptr<Chair> build_chair() override {
return make_unique<AChair>();
}
virtual unique_ptr<Table> build_table() override {
return make_unique<ATable>();
}
};
// Client code, which don't need to care the style of furniture.
void operate(FurnitureFactory* ff) {
unique_ptr<Chair> c = ff->build_chair();
unique_ptr<Table> t = ff->build_table();
c->show();
t->show();
}
int main() {
AFurnitureFactory a;
// Of course you can extend BFF, CFF
operate(&a);
}