Factory design pattern is a creation design pattern which solves the problem of creating product objects without specifying their concrete classes.

 
class Product {
 
private:
 
public:
	virtual ~Product() = default;
	
	virtual std::string Operation() const = 0;
 
};
 
class ConcreateProduct1 : public Product{
public:
	std::string Operation() const override {
		return "{Result of ConcreateProduct1}";
	}
};
 
class ConcreateProduct2 : public Product {
 
public:
	std::string Operation() const override {
		return "{Result of ConcreateProduct2}";
	}
};
 
class Creator {
 
public:
	virtual ~Creator() = default;
	virtual Product* FactoryMethod() const = 0;
	
	std::string SomeOperation() const {
		Product* product = this->FactoryMethod();
		std::string result = product->Operation();
		delete product;
		return result;
	}
};
 
class ConcreateCreator1 : public Creator{
 
public:
	Product* FactoryMethod() const override {
		return new ConcreateProduct1();
	}
};
 
class ConcreateCreator2 : public Creator{
 
public:
	Product* FactoryMethod() const override {
		return new ConcreateProduct2();
	}
};
 
int main(){
 
Creator* creator = new ConcreateCreator1();
creator->SomeOperation();
 
Creator* creator2 = new ConcreateCreator2();
creator2->SomeOperation();
 
delete creator;
delete creator2;
return 0;
}