#include <iostream>
using namespace std;
class Product{
public:
virtual void doSomething() = 0;
virtual ~Product(){}
};
class ProductA : public Product{
public:
void doSomething()
{
cout<<"I am A, I am doing something"<<endl;
}
};
class Factory{
public:
virtual Product * FactoryMethod() = 0;
Product * create(){
return FactoryMethod();
}
virtual ~Factory(){}
};
class ConcreteFactoryA : public Factory{
public:
Product * FactoryMethod(){
return new ProductA;
}
};
int main()
{
cout << "Hello World!" << endl;
ConcreteFactoryA * concreteFactoryA = new ConcreteFactoryA();
concreteFactoryA->create()->doSomething();
return 0;
}