#include <iostream> struct I_Pro { virtual void fun() = 0; }; class A : public I_Pro { public: virtual void fun(); }; void A::fun() { std::cout << "funA" << std::endl; } class B : public I_Pro { public: virtual void fun(); }; void B::fun() { std::cout << "funB" << std::endl; } struct I_Factry { virtual I_Pro* createPro() = 0; }; class FactoryA : public I_Factry { virtual I_Pro* createPro(); }; I_Pro* FactoryA::createPro() { I_Pro* ptr = new A; return ptr; } int main() { //工厂就是搞两个工厂,每个工厂对应一个产品,这解决简单工厂模式的问题,但治标不治本 I_Factry* ptr = new FactoryA;//不知这里factory还要搞个抽象类,莫非是为了以后有可能有多个工厂考虑的 I_Pro* pro = ptr->createPro(); pro->fun(); //I_Factry* ptr = new FactoryA;//不知这里factory还要搞个抽象类,莫非是为了以后有可能有多个工厂考虑的 //I_Pro* pro = ptr->createPro(); //pro->fun(); getchar(); return 0; }
抽象工厂模式:
在添加子类时,子类不需要继承抽象类的接口,这样就给增加子类添加了难度,抽象工厂就把有相同接口的子类归为一类,然后针对这些子类创建一个工厂,其他类型的子类也创建一个工厂,然后用户需要知道在那个工厂里面在相应工厂里面创建子类产品即可,这也没有太大的难度,但增加了程序的代码量。