简介
简单工厂模式又叫做静态工厂方法(Static Factory Method)模式。该模式不属于23种GOF设计模式,但是可以被认为是一种特殊的工厂方法模式。
简单工厂模式最大的缺点是违背了“开闭原则”,当增加了新的产品时,需要去修改简单工厂类的结构。工厂方法模式主要是针对单一产品结构的情景,而抽象工厂模式是针对多级产品结构的场景。
角色与职责
实现
#include <iostream>
#include <vector>
using namespace std;
typedef enum ProductTypeTag{
TypeA,
TypeB,
TypeC
}PRODUCTTYPE;
// Here is the product class
class Product{
public:
virtual void Show() = 0;
};
class ProductA : public Product{
public:
void Show()
{
cout << "I'm ProductA" << endl;
}
};
class ProductB : public Product{
public:
void Show()
{
cout << "I'm ProductB" << endl;
}
};
class ProductC : public Product{
public:
void Show()
{
cout << "I'm ProductC" << endl;
}
};
// Here is the Factory class
class Factory{
public:
Product* CreateProduct(PRODUCTTYPE type){
switch (type){
case TypeA:
return new ProductA();
case TypeB:
return new ProductB();
case TypeC:
return new ProductC();
default:
return NULL;
}
}
};
int main(int argc, char *argv[]){
// First, create a factory object
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;
cin.get();
return 0;
}