#include <iostream>
#include <vector>
class Base
{
protected:
std::vector<Base*> Children;
public:
void add(Base* b) { Children.push_back(b); }
void del(Base* b) { }
void reMove() { Children.clear(); }
public:
virtual void print() = 0;
};
**************************************************Derive.h
#include "Base.h"
class DeriveA : public Base
{
public:
void print()
{
std::cout << "DeriveA" << std::endl;
}
};
class DeriveB : public Base
{
public:
void print()
{
std::cout << "DeriveB" << std::endl;
}
};
**************************************************Factory.h
#include "Base.h"
class Factory
{
public:
virtual Base* CreateBase(int id) = 0;
};
extern Factory* createFactory();
**************************************************Factory.cpp
#include "Factory.h"
#include "Derive.h"
class CFactory : public Factory, public Base
{
public:
void print() {}
Base* CreateBase(int id);
};
Base* CFactory::CreateBase(int id)
{
Base* b = nullptr;
if (1 == id)
b = new DeriveA();
else if (2 == id)
b = new DeriveB();
add(b);
return b;
}
Factory * createFactory()
{
return new CFactory();
}
**************************************************
#include "Factory.h"
int main()
{
auto factory = createFactory();
auto base = factory->CreateBase(1);
base->print();
auto base1 = factory->CreateBase(2);
base1->print();
return 0;
}