工厂模式又叫做多态工厂模式。工厂模式的核心是在简单工厂模式之上在封装一个抽象工厂类,从而将创建工作推迟到抽象工厂类的子类中,这样做的最大好处是使工厂模式符合开闭原则。即在新增一个产品时,不再是修改具体工厂类的成员函数了,而是通过抽象工厂类派生出一个具体工厂类,在具体工厂类中实现新产品的生产。总之一句话就是:简单工厂模式+开闭原则=工厂模式。
优点:克服了简单工厂违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点。
缺点:每增加一个产品,相应的也要增加一个子工厂类及产品类,加大了额外的开发量。
类图如下:
参考代码如下:
#include <iostream> /* 抽象产品类 */ class Product { public: virtual ~Product() { } /* 具体类的公共操作接口 */ virtual void say() = 0; }; /* 具体产品类 */ class ConcreteProduct :public Product { public: ConcreteProduct() { std::cout << "ConcreteProduct..." << std::endl; } void say() { std::cout << "ConcreteProduct Say..." << std::endl; } ~ConcreteProduct() { } }; /* 抽象工厂类 */ class Factory { public: virtual Product* CreateProduct() = 0; virtual ~Factory() { } protected: Factory() { } }; /* 具体工厂类 */ class ConcreteFactory :public Factory { public: ConcreteFactory() { std::cout << "ConcreteFactory..." << std::endl; } ~ConcreteFactory() { } Product* CreateProduct() { return new ConcreteProduct(); } }; int main() { Factory *factory = new ConcreteFactory(); Product *product = factory->CreateProduct(); product->say(); delete factory; delete product; return 0; }
运行结果如下: