案例分析:
每台汽车都要有发动机和轮胎等部件,但不同品牌的汽车所用的部件应该是不同的,汽车生产厂可以有不同的生产线,每个生产线负责生产某一型号的汽车部件。例如某厂有两条生产线,一条生产宝马的部件,一条生产宝莱车的部件。客户要买什么车,就启动相应的生产线。
意图:
提供一个创建一系列相关会相互依赖对象的接口,而无须制定他们具体的类。这里结合案例将创建两条生产线,分别生产宝马和宝莱汽车的轮胎和引擎。
结构图:

程序代码:
#include <iostream.h>
class LunTai
{
public:
virtual void display()=0;
};
class YinQing
{
public:
virtual void display()=0;
};
//
class BaoMaCarLunTai:public LunTai
{
public:
void display()
{
cout<<"宝马轮胎!"<<endl;
}
};
class BaoCaiCarLunTai:public LunTai
{
public:
void display()
{
cout<<"宝菜轮胎!"<<endl;
}
};
//
class BaoMaCarYinQing:public YinQing
{
public:
void display()
{
cout<<"宝马引擎!"<<endl;
}
};
class BaoCaiCarYinQing:public YinQing
{
public:
void display()
{
cout<<"宝菜引擎!"<<endl;
}
};
//
class CarFactory
{
public:
virtual LunTai* getCarLunTai()=0;
virtual YinQing* getCarYinQing()=0;
};
class BaoMaCarFactory:public CarFactory
{
public:
LunTai* getCarLunTai()
{
return new BaoMaCarLunTai;
}
YinQing* getCarYinQing()
{
return new BaoMaCarYinQing;
}
};
class BaoCaiCarFactory:public CarFactory
{
public:
LunTai* getCarLunTai()
{
return new BaoCaiCarLunTai;
}
YinQing* getCarYinQing()
{
return new BaoCaiCarYinQing;
}
};
int main()
{
BaoMaCarFactory BaoMaFactory;
BaoMaCarLunTai* BaoMaLunTai=(BaoMaCarLunTai*)BaoMaFactory.getCarLunTai();
BaoMaLunTai->display();
BaoMaCarYinQing* BaoMaYinQing=(BaoMaCarYinQing*)BaoMaFactory.getCarYinQing();
BaoMaYinQing->display();
BaoCaiCarFactory BaoCaiFactory;
BaoCaiCarLunTai* BaoCaiLunTai=(BaoCaiCarLunTai*)BaoCaiFactory.getCarLunTai();
BaoCaiLunTai->display();
BaoCaiCarYinQing* BaoCaiYinQing=(BaoCaiCarYinQing*)BaoCaiFactory.getCarYinQing();
BaoCaiYinQing->display();
return 1;
}
运行结果:
宝马轮胎!
宝马引擎!
宝菜轮胎!
宝菜引擎!
Press any key to continue