//代码示例
#include <iostream>
#include <string>
using namespace std;
enum CayType
{
CAMRY,//凯美瑞
AVALON,//亚洲龙
CROWN,//皇冠
ACCORD,//雅阁
MAGOTAN,//迈腾
END,
};
class CCar
{
public:
CCar(){}
virtual ~CCar(){}
public:
string GetName(){ return m_strName; }
float GetMileage(){ return m_fMileage; }
float GetSpeed(){ return m_fSpeed; }
protected:
string m_strName;//汽车名称
float m_fMileage;//行驶里程
float m_fSpeed;//速度
};
//凯美瑞
class CCamry : public CCar
{
public:
CCamry()
{
m_strName = "Camry";
m_fMileage = 80000;
m_fSpeed = 80.0;
}
~CCamry(){}
protected:
private:
};
//亚洲龙
class CAvalon : public CCar
{
public:
CAvalon()
{
m_strName = "Avalon";
m_fMileage = 90000;
m_fSpeed = 90.0;
}
~CAvalon(){}
protected:
private:
};
//皇冠
class CCROWN : public CCar
{
public:
CCROWN()
{
m_strName = "CROWN";
m_fMileage = 10000;
m_fSpeed = 100.0;
}
~CCROWN(){}
protected:
private:
};
//雅阁
class CAccord : public CCar
{
public:
CAccord()
{
m_strName = "Accord";
m_fMileage = 50000;
m_fSpeed = 110.0;
}
~CAccord(){}
protected:
private:
};
//迈腾
class CMAGOTAN : public CCar
{
public:
CMAGOTAN()
{
m_strName = "MAGOTAN";
m_fMileage = 40000;
m_fSpeed = 120.0;
}
~CMAGOTAN(){}
protected:
private:
};
class CCreator
{
public:
CCreator(){}
virtual ~CCreator(){}
protected:
virtual CCar* CreateCar(CayType type) = 0;
public:
void GetCarInfo(CayType type)
{
CCar* pCar = CreateCar(type);
if (NULL != pCar)
{
cout << "Name:" << pCar->GetName() << endl;
cout << "Mileage:" << pCar->GetMileage() << endl;
cout << "Speed:" << pCar->GetSpeed() << endl;
cout << endl;
delete pCar;
pCar = NULL;
}
}
private:
};
class CACretor : public CCreator
{
public:
CACretor(){}
~CACretor(){}
public:
virtual CCar* CreateCar(CayType type)
{
cout << "ACretor" << endl;
CCar* pCar;
switch (type)
{
case CAMRY:
pCar = new CCamry;
break;
case AVALON:
pCar = new CAvalon;
break;
case CROWN:
pCar = new CCROWN;
break;
default:
pCar = NULL;
}
return pCar;
}
};
class CBCretor : public CCreator
{
public:
CBCretor(){}
~CBCretor(){}
public:
virtual CCar* CreateCar(CayType type)
{
cout << "BCretor" << endl;
CCar* pCar;
switch (type)
{
case ACCORD:
pCar = new CAccord;
break;
case MAGOTAN:
pCar = new CMAGOTAN;
break;
default:
pCar = NULL;
}
return pCar;
}
private:
};
int main()
{
CCreator *pCreator1 = new CACretor;
CCreator *pCreator2 = new CBCretor;
pCreator1->GetCarInfo(AVALON);
pCreator2->GetCarInfo(MAGOTAN);
return 0;
}