您的位置:首页 > 其它

抽象工厂模式(Abstract Factory)案例分析

2008-08-20 17:47 176 查看
案例分析:

每台汽车都要有发动机和轮胎等部件,但不同品牌的汽车所用的部件应该是不同的,汽车生产厂可以有不同的生产线,每个生产线负责生产某一型号的汽车部件。例如某厂有两条生产线,一条生产宝马的部件,一条生产宝莱车的部件。客户要买什么车,就启动相应的生产线。

意图:

提供一个创建一系列相关会相互依赖对象的接口,而无须制定他们具体的类。这里结合案例将创建两条生产线,分别生产宝马和宝莱汽车的轮胎和引擎。

结构图:





程序代码:

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: