抽象工厂模式
每种汽车都要有发动机,轮胎,方向盘等零件,而且要想组装一辆汽车必须具有这些零件,但不同品牌的汽车所使用的零部件却不同。试用抽象工厂模式实现。
特点:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类,交换产品系列 ,产品的具体类名被具体工厂的实现分离
实现代码:
#include <string>
#include <iostream>
#include <vector>
using namespace std;
//发动机抽象接口
class engime
{
public :
virtual void GetUser()=0;
virtual void InsertUser()=0;
};
//车轮抽象接口
class steel
{
public:
virtual void GetDepartment()=0;
virtual void InsertDepartment()=0;
};
//福特用户发动机
class ToyUserEngimeEngime : public engime
{
public:
virtual void GetUser()
{
cout<<"福特用户发动机"<<endl;
}
};
//福特用户轮胎
class ToyUserEngimeSteel : public steel
{
public:
virtual void GetDepartment()
{
cout<<"福特用户轮胎"<<endl;
}
};
//东风用户发动机
class ToyUserEngime : public engime
{
public:
virtual void GetUser()
{
cout<<"东风用户发动机"<<endl;
}
};
//东风用户轮胎
class ToyUserSteel: public steel
{
public:
virtual void GetDepartment()
{
cout<<"东风用户轮胎"<<endl;
}
};
//抽象工厂
class IFactory
{
public:
virtual engime* CreateUser()=0;
virtual steel* CreateDepartment()=0;
};
//福特工厂
class FtFactory : public IFactory
{
public:
virtual engime* CreateUser()
{
return new ToyUserEngimeEngime();
}
virtual steel* CreateDepartment()
{
return new ToyUserEngimeSteel();
}
};
//东风工厂
class ToyFactory : public IFactory
{
public:
virtual engime* CreateUser()
{
return new ToyUserEngime();
}
virtual steel* CreateDepartment()
{
return new ToyUserSteel();
}
};
//客户端:
int main()
{
IFactory* factory1= new ToyFactory(); //生产东风汽车
engime* user1=factory1->CreateUser();
steel* depart1 = factory1->CreateDepartment();
user1->GetUser();
depart1->GetDepartment();
/
IFactory* factory= new FtFactory(); //生产福特汽车
engime* user=factory->CreateUser();
steel* depart = factory->CreateDepartment();
user->GetUser();
depart->GetDepartment();
return 0;
}