推荐文章:http://www.jellythink.com/archives/62
类图:
类图解读:
Factory:定义一个工厂
Factory1,Factory2:工厂中的不同的两条生产线。
ProductA,ProductB:需要生产的产品类型定义(接口)
ProductA1,ProductA1;ProductB1,ProductB2:需生产的具体产品。
在一个工厂中,创建多条生产流水线,来生产自定义的产品,只是相对工厂方法模式中,每一条可生产加了一条生产之路可生产出新产品(可扩展性)。
实现代码:
#include <iostream>
usingnamespace std;
// Product A
class ProductA
{
public:
virtualvoidShow()=0;
};
class ProductA1:publicProductA
{
public:
voidShow()
{
cout<<"I'm ProductA1"<<endl;
}
};
class ProductA2:publicProductA
{
public:
voidShow()
{
cout<<"I'm ProductA2"<<endl;
}
};
// Product B
class ProductB
{
public:
virtualvoidShow()=0;
};
class ProductB1:publicProductB
{
public:
voidShow()
{
cout<<"I'm ProductB1"<<endl;
}
};
class ProductB2:publicProductB
{
public:
voidShow()
{
cout<<"I'm ProductB2"<<endl;
}
};
// Factory
class Factory
{
public:
virtualProductA*CreateProductA()=0;
virtualProductB*CreateProductB()=0;
};
class Factory1:publicFactory
{
public:
ProductA*CreateProductA()
{
returnnewProductA1();
}
ProductB*CreateProductB()
{
returnnewProductB1();
}
};
class Factory2:publicFactory
{
ProductA*CreateProductA()
{
returnnewProductA2();
}
ProductB*CreateProductB()
{
returnnewProductB2();
}
};
int main(intargc,char*argv[])
{
Factory* factoryObj1=newFactory1();
ProductA* productObjA1=factoryObj1->CreateProductA();
ProductB* productObjB1=factoryObj1->CreateProductB();
productObjA1->Show();
productObjB1->Show();
Factory* factoryObj2 = newFactory2();
ProductA* productObjA2 = factoryObj2->CreateProductA();
ProductB* productObjB2 = factoryObj2->CreateProductB();
productObjA2->Show();
productObjB2->Show();
if(factoryObj1!=NULL)
{
delete factoryObj1;
factoryObj1=NULL;
}
if(productObjA1!=NULL)
{
delete productObjA1;
productObjA1=NULL;
}
if(productObjB1!=NULL)
{
delete productObjB1;
productObjB1=NULL;
}
if(factoryObj2!=NULL)
{
delete factoryObj2;
factoryObj2=NULL;
}
if(productObjA2!=NULL)
{
delete productObjA2;
productObjA2=NULL;
}
if(productObjB2!=NULL)
{
delete productObjB2;
productObjB2=NULL;
}
}