设计模式之 简单工厂模式(C++ 模板实现)

来源:互联网 发布:js radio 取得 编辑:程序博客网 时间:2024/06/06 01:36

这篇文章在上一篇介绍简单工厂模式的实现基础之上,采用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;}


0 0
原创粉丝点击