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