您的位置:首页 > 编程语言 > C语言/C++

使用C++实现工厂模式

2016-03-16 14:03 281 查看
#ifndef _IMODULE_
#define _IMODULE_
#include "stdafx.h"

class iModule
{
public:
int index;
iModule(){};
~iModule(){};
virtual void initialize(int idx){};
virtual bool isConnected();
protected:
virtual bool programId(){ return true;}
};

#endif

iModule.h

#include "stdafx.h"
#include "iModule.h"
using namespace std;
bool iModule::isConnected()
{
cout << "Module" << index <<"is connected"<<endl;
return true;
}

iModule.cpp

#ifndef _IDETECTORMGR_
#define _IDETECTORMGR_
#include "stdafx.h"
#include "iModule.h"

class iDetectorMgr
{
public:
static const int arraySize = 64;
int moduleNum;
iModule* moduleArray[arraySize];

iDetectorMgr();
~iDetectorMgr();

virtual void create(){};
virtual void initialize();
virtual void deleteAll(){};
};

#endif


iDetectorMgr.h

#include "stdafx.h"
#include "iDetectorMgr.h"

iDetectorMgr::iDetectorMgr()
{
moduleNum = 0;
}

iDetectorMgr::~iDetectorMgr()
{
}
void iDetectorMgr::initialize()
{
int i=0;

for(i = 0; i < moduleNum; i++)
{
moduleArray[i]->initialize(i);

}
return ;
}


iDetectorMgr.cpp

#ifndef _MODULESV_
#define _MODULESV_
#include "stdafx.h"
#include "iModule.h"
class moduleSV:public iModule
{
public:
void initialize(int idx);
protected:
bool programId();
};
#endif

moduleSV.h

#include "stdafx.h"

#include "moduleSV.h"

void moduleSV::initialize(int idx)
{
index = idx;
programId();
}
bool moduleSV::programId()
{
cout << "program ID SV" << index<<endl;
return true;
}


moduleSV.cpp

#ifndef _DETECTORSV_
#define _DETECTORSV_
#include "stdafx.h"
#include "iDetectorMgr.h"
class detectorSV:public iDetectorMgr
{
public:
static const int moduleSvNum = 6;
detectorSV();
~detectorSV();
virtual void create();
virtual void deleteAll();
};
#endif


detectorSV.h

#include "stdafx.h"

#include "detectorSV.h"
#include "moduleSV.h"

detectorSV::detectorSV()
{
create();
}

detectorSV::~detectorSV()
{
deleteAll();
}

void detectorSV::create()
{
iModule *p;
for(int i = 0;i < moduleSvNum; i++)
{
p = static_cast<iModule*>(new moduleSV());
moduleArray[i] = p;
}
moduleNum = moduleSvNum;
}

void detectorSV::deleteAll()
{
for(int i = 0;i < moduleSvNum; i++)
{
delete moduleArray[i];
moduleNum = 0;
}
}


detectorSV.cpp

// model.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "detectorSV.h"

int _tmain(int argc, _TCHAR* argv[])
{
detectorSV detSVMgr;
detSVMgr.initialize();
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: