概述
在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成。
优点
用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。
缺点
在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度。
类图
代码块
#include <iostream>
using namespace std;
class Product
{
};
class ProductA : public Product
{
public:
ProductA()
{
cout << "i am ProductA " << endl;
}
};
class ProductB : public Product
{
public:
ProductB()
{
cout << "i am ProductB " << endl;
}
};
class Factory
{
public:
virtual Product *createProduct() = 0;
};
class FactoryA : public Factory
{
public:
Product *createProduct()
{
return new ProductA();
}
};
class FactoryB : public Factory
{
public:
Product *createProduct()
{
return new ProductB();
}
};
int main()
{
Factory *fc = new FactoryB();
Product * pro = fc->createProduct();
delete pro;
delete fc;
return 0;
}