对于工厂模式,具体上可以分为三类:
- 简单工厂模式;
- 工厂方法模式;
- 抽象工厂模式。
- 在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
- 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。
上面的UML图表示:ProductA,ProductB,ProductC继承于Product,其中方法Show是public属性的,Factory类创造产品的方法CreateProduct依赖于ProductA,ProductB,ProductC。
简单的C++实现 模型如下:
#include<iostream>
using namespace std;
class Product {
public:
virtual void show() =0;
};
class ProductA : public Product {
public:
virtual void show()
{
cout<<" I am A"<<endl;
}
};
class ProductB : public Product {
public:
virtual void show()
{
cout<<" I am B"<<endl;
}
};
class ProductC : public Product {
public:
virtual void show()
{
cout<<" I am C"<<endl;
}
};
enum ProductType{TypeA, TypeB, TypeC};
class Factory
{
public:
Product * CreateProduct(ProductType type)
{
Product *temp;
switch(type)
{
case TypeA:
temp=new ProductA();break;
case TypeB:
temp=new ProductB();break;
case TypeC:
temp=new ProductC();break;
default:
return NULL;
}
return temp;
}
};
int main(int argc, char *argv[])
{
Factory *ProductFactory = new Factory();
Product *productObjA = ProductFactory->CreateProduct(TypeA);
if (productObjA != NULL)
productObjA->show();
Product *productObjB = ProductFactory->CreateProduct(TypeB);
if (productObjB != NULL)
productObjB->show();
Product *productObjC = ProductFactory->CreateProduct(TypeC);
if (productObjC != NULL)
productObjC->show();
delete ProductFactory;
ProductFactory = NULL;
delete productObjA;
productObjA = NULL;
delete productObjB;
productObjB = NULL;
delete productObjC;
productObjC = NULL;
return 0;
}