#include #include 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 build_chair() = 0; virtual unique_ptr build_table() = 0; }; // A concrete Factury will create the same style of objects. class AFurnitureFactory : public FurnitureFactory { public: virtual unique_ptr build_chair() override { return make_unique(); } virtual unique_ptr
build_table() override { return make_unique(); } }; // Client code, which don't need to care the style of furniture. void operate(FurnitureFactory* ff) { unique_ptr c = ff->build_chair(); unique_ptr
t = ff->build_table(); c->show(); t->show(); } int main() { AFurnitureFactory a; // Of course you can extend BFF, CFF operate(&a); }