设计模式——抽象工厂模式(8)

来源:互联网 发布:php new class 编辑:程序博客网 时间:2024/05/29 06:28

 

   抽象工厂模式

每种汽车都要有发动机轮胎,方向盘等零件,而且要想组装一辆汽车必须具有这些零件,但不同品牌的汽车所使用的零部件却不同试用抽象工厂模式实现。

特点:定义了一个创建一系列相关或相互依赖的接口,而无需指定它们的具体类,交换产品系列 ,产品的具体类名被具体工厂的实现分离

                  

实现代码:

#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;

}

原创粉丝点击