工厂模式:
(摘自菜鸟教程)
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。
class factory { public: virtual void draw() = 0; }; class Rect : public factory { public: void draw() { std::cout << "生成一个矩形" << std::endl; } }; class Squ : public factory { public: void draw() { std::cout << "生成一个正方形" << std::endl; } }; class Circ : public factory { public: void draw() { std::cout << "生成一个圆" << std::endl; } }; class ShapFactory { public: ShapFactory() {T = NULL;} ~ShapFactory() { ReleaseFactouy(); } factory* GetFactory(std::string strShap) { if (strShap.compare("rectangle") == 0) { T = new Rect; } if (strShap.compare("square") == 0) { T = new Squ; } if (strShap.compare("circle") == 0) { T = new Circ; } return T; } void ReleaseFactouy() { if (T != NULL) { delete T; } } private: factory * T; }; int main() { ShapFactory* AFactory = new ShapFactory; factory* fac01 = AFactory->GetFactory("rectangle"); fac01->draw(); //生成一个矩形 factory* fac02 = AFactory->GetFactory("square"); fac02->draw(); //生成一个正方形 factory* fac03 = AFactory->GetFactory("circle"); fac03->draw(); //生成一个圆 delete AFactory; return 0; }