设计模式--工厂方法

//代码示例

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值