工厂模式属于创建型模式,大致可以分为简单工厂模式、抽象工厂模式。
简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品。
enum PTYPE
{
ProdA = ,
ProdB =
}; class ProductBase
{
public:
virtual void Show() = ;
}; //产品A
class ProductA: public ProductBase
{
public:
ProductA(){show();}
void Show() { cout<<"Product A"<<endl; }
}; //产品B
class ProductB: public ProductBase
{
public:
ProductB(){show();}
void Show() { cout<<"Product B"<<endl; }
}; //工厂
class Factory
{
public:
ProductBase* CreateProduct(enum PTYPE type)
{
if(type == ProdA)
return new ProductA(); //生产A
else if(type == ProdB)
return new ProductB(); //生产B
else
return nullptr;
}
};
抽象工厂模式: 为一组相关的产品定义实例化,提供一系列的接口而无需去定义一些工厂类
enum PTYPE
{
ProdA = ,
ProdB =
}; class ProductBase
{
public:
virtual void Show() = ;
}; //产品A
class ProductA: public ProductBase
{
public:
ProductA(){show();}
void Show() { cout<<"Product A"<<endl; }
}; //产品B
class ProductB: public ProductBase
{
public:
ProductB(){show();}
void Show() { cout<<"Product B"<<endl; }
}; class ProductBase_PLUS
{
public:
virtual void Show() = ;
}; //产品A-plus
class ProductA_PLUS: public ProductBase_PLUS
{
public:
ProductA_PLUS(){show();}
void Show() { cout<<"Product A-PLUS"<<endl; }
}; //产品B-plus
class ProductB_PLUS: public ProductBase_PLUS
{
public:
ProductB_PLUS(){show();}
void Show() { cout<<"Product B-PLUS"<<endl; }
}; class FactoryBase
{
public:
virtual ProductBase* CreateProduct() = ;
virtual ProductBase_PLUS* CreatePLUSProduct() = ;
}; //工厂A
class FactoryA : public FactoryBase
{
public:
ProductBase* CreateProduct()//生产A
{
return new ProductA();
} ProductBase_PLUS* CreatePLUSProduct()//生产A-plus
{
return new ProductA_PLUS();
}
}; //工厂B
class FactoryB : public FactoryBase
{
public:
ProductBase* CreateProduct()//生产B
{
return new ProductB();
} ProductBase_PLUS* CreatePLUSProduct()//生产B-plus
{
return new ProductB_PLUS();
}
};