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;
}