随着生产规模扩大,工厂和产品的管理就变得麻烦了,为了不再增加工厂种类,可以增加原有工厂的生产能力。
例如产品不仅分为A、B两类,还可以按照另一种维度分为0、1两类,这相当于为每一个字母大类都增加了一个数字子类产品。这时,可以扩展每个工厂的能力,令每个工厂还是都可以生产A、B两类产品,但是每个工厂都只能生产一个数字子类产品。
以下代码定义产品分类,产品A分为A0和A1两类,产品B分为B0和B1两类。
#include <iostream>
using namespace std;
class ProductsA
{
public:
virtual void Display() = 0;
virtual ~ProductsA(){}
};
class ProductA0:public ProductsA
{
public:
void Display()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
class ProductA1:public ProductsA
{
public:
void Display()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
class ProductsB
{
public:
virtual void Display() = 0;
virtual ~ProductsB(){}
};
class ProductB0:public ProductsB
{
public:
void Display()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
class ProductB1:public ProductsB
{
public:
void Display()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
以下代码定义工厂类,分为0类工厂和1类工厂,分别生产两种产品。
class AbstractFactory
{
public:
virtual ProductsA* CreateProductA()=0;
virtual ProductsB* CreateProductB()=0;
};
class Factory0:public AbstractFactory
{
public:
ProductsA* CreateProductA()
{
return new ProductA0();
}
ProductsB* CreateProductB()
{
return new ProductB0();
}
};
class Factory1:public AbstractFactory
{
public:
ProductsA* CreateProductA()
{
return new ProductA1();
}
ProductsB* CreateProductB()
{
return new ProductB1();
}
};
以下代码用0、1工厂分别生产了A、B类商品,一共是4种商品。
int main(void){
AbstractFactory* factory0 = new Factory0();
ProductsA* productA = factory0->CreateProductA();
productA->Display();
ProductsB* productB = factory0->CreateProductB();
productB->Display();
delete factory0;
delete productA;
delete productB;
AbstractFactory* factory1 = new Factory1();
productA = factory1->CreateProductA();
productA->Display();
productB = factory1->CreateProductB();
productB->Display();
delete factory1;
delete productA;
delete productB;
return 0;
}
输出
virtual void ProductA0::Display()
virtual void ProductB0::Display()
virtual void ProductA1::Display()
virtual void ProductB1::Display()










网友评论