設計模式之 簡單工廠模式(C++ 模板實現)

這篇文章在上一篇介紹簡單工廠模式的實現基礎之上,採用C++模板技術來克服上一篇中提到的缺點。


同樣以汽車廠生產汽車爲例進行說明。


代碼如下:

#include <iostream>
#include <string>

using namespace std;

class CCarBase
{
public:
	virtual void printName()
	{
		cout << "汽車廠商:" << m_name << endl;
	}

	virtual ~CCarBase(){}

protected:
	CCarBase(){}
	CCarBase(const string& name):m_name(name){}
	string m_name;
};

class GMCar : public CCarBase
{
public:
	GMCar() :CCarBase("通用汽車公司"){}

	void printName()
	{
		cout << "GMCar" << endl;
		CCarBase::printName();
	}
};

class FordCar : public CCarBase
{
public:
	FordCar() :CCarBase("福特汽車公司"){}

	void printName()
	{
		cout << "FordCar" << endl;
		CCarBase::printName();
	}
};

// 使用模板解決簡單工廠模式的缺陷

// 第一種:返回任意一個類的實例(更加通用)
class STCarFactory
{
public:
	template<class T>
	static T* create()
	{
		return new T();
	}
};

/*
// 第二種:返回CCarBase的子類實例
class STCarFactory
{
public:
	// T是CCarBase的子類
	template<class T>
	static CCarBase* create()
	{
		return new T();
	}
};
*/

void testSTCarFactory()
{
	CCarBase* pCar = NULL;
	pCar = STCarFactory::create<GMCar>();
	pCar->printName();
	delete pCar;

	pCar = STCarFactory::create<FordCar>();
	pCar->printName();
	delete pCar;

	pCar = NULL;
}

int main(void)
{
	testSTCarFactory();

	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章